簡體   English   中英

JS call():調用函數內的意外“this”上下文

[英]JS call(): Unexpected “this” context within function being called

這是我的實驗腳本:

window.name = 'myWindow';

function sum(num1, num2){
    console.log('context name: '+this.name+', caller: '+arguments.callee.caller.name);
}

function callSumNoName(num1, num2){
    sum.call(this, num1, num2);
}

function callSum(num1, num2){
    this.name = 'fnCallSumm';
    sum.call(this, num1, num2);
}

console.log(callSumNoName()); // no property name in the function
console.log(callSum());       // the property name is 'fnCallSumm'
console.log(callSumNoName()); // no property name in the function

我希望函數sum()中的this.name必須是:

myWindow
fnCallSumm
myWindow

......但實際上它們是:

myWindow
fnCallSumm
fnCallSumm

這是什么意思?! 為什么在3個時間它顯示從一次的函數調用的名稱屬性,而不是現在必須提取的窗口對象的name屬性?

callSumthis指的是全局對象(winow),所以你實際上覆蓋了window.name ,這就是為什么你得到fnCallSumm兩次。

function callSum(num1, num2){
    this.name = 'fnCallSumm';// equivalent to `window.name = 'fnCallSumm';`
    sum.call(this, num1, num2);
}

因為您在之前的調用中設置了名稱值。 this.name現在是“fnCallSumm”

function callSumNoName(num1, num2){
    this.name = "myWindow";
    sum.call(this, num1, num2);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM