var name = "The Window"; var object = { name : "My Object", getNameFunc : function(){ return function(){ return this.name; }; } };alert(object.getNameFunc()());
结果是The Window 而不是My Object。
需要弄明白一个事情就是this的指向!!
function() {return this.name}() 这样执行,他中this是指向window的。所以name就是window上定义的name,也就是全局的name。
还不明白是吗,那我们再详细点来说。
把.name去掉,这个this指向[object Window],window下的name
去掉this,你会发现结果还是一样的,你会问,这是为什么呢?
这是因为每个函数里面都有一个this存在,与是否显式调用他没有关系。
下面我们把程序改成这样:
var name = "The Window"; var object = { name : "My Object", getNameFunc : function(){ return function(){ return object.name; }; } }; alert(object.getNameFunc()());
这样子 显示的就是 My Object了。
或者把this的指向改一下:
var name = "The Window"; var object = { name : "My Object", getNameFunc : function(){ var self=this; return function(){ return self.name; }; } }; alert(object.getNameFunc()());
结果也是My Object。