某人提出
请教下谁能解释下这个值var name = "The Window"; var object = { name: "My Object", getName: function () { return this.name; } }; alert((object.getName = object.getName)());--------The Window
经过解释之后
object.getNameFunc()(); 我理解是the window,但是(object.getName = object.getName)() 怎么也是the window呢?
var a = 1;a = a返回啥,你就知道为什么是the window了
最后某神举例
var name = "The Window"; var object = { name : "My Object", getNameFunc : function(){ return this.name; } }; var a = object.getNameFunc;alert(a());//The Windowalert(object.getNameFunc()); //My Object
最后某神解释
object.getName = object.getName;alert(object.getName()); //My Objectalert((object.getName = object.getName)());//"The Window" 还是不明白 为啥第一个是obj 第二个是window
这个解释怎么理解啊
最后他明白了
某渣:我大概明白了 执行
alert((object.getName = object.getName)); 返回
function () { return this.name; }这里this 就是window了
圆满解决
某神总结
当一个函数作为函数而不是方法来调用的时候,this指向的是全局对象当函数作为某个对象的方法来调用时,this指向那个对象
object.getNameFunc() ,此时的 object.getNameFunc 为引用类型,其 base 为 object,this 指向的是 base,所以返回 object.name 的值
name = object.getNameFunc, test 作为标识符,生成了其他引用类型的值,此时 base 已经从 object 重置为 null,也就是会指向 global(window),所以返回的是 window.name 的值。问题的关键在于「引用类型(type Reference)的中间值发生改变」