你的位置:首页 > Java教程

[Java教程]javascript有关this的那些事(某渣提出的问题)


某人提出

请教下谁能解释下这个值
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 Window
alert(object.getNameFunc());  //My Object

最后某神解释

因为a()实际上是window.a()
所以执行a()的时候this指向window
this.name就是window.name

 

 

object.getName = object.getName;
alert(object.getName());  //My Object
alert((object.getName = object.getName)());//"The Window" 
还是不明白 为啥第一个是obj 第二个是window

这个解释怎么理解啊

最后他明白了

 

某渣:我大概明白了 执行 

alert((object.getName = object.getName)); 返回
 function () {
                return this.name;
            }
这里this 就是window了

 

额,对的
 

某渣:是吧
 

就是这
 

某渣:就是一对()返回一个函数

(object.getName = object.getName)返回的实际上是=运算的结果

某渣:多谢大家
 
 

圆满解决

某神总结

当一个函数作为函数而不是方法来调用的时候,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)的中间值发生改变」