[英]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屬性?
在callSum
, this
指的是全局對象(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.