var name = "window";
var object = {
name: "My object",
getName: function(){
return this.name;
}
};
//这里不明白,为什么会返回window,书上说this的值不能得到维持,为什么啊
(object.getName = object.getName)(); //"window"在非严格模式下;
(object.getName = object.getName)();//"window"
其实就是个赋值表达式将作为object的getName属性的函数返回了,再以普通函数的形式调用,此时函数内的this即全局对象,所以输出 window
object.getName = object.getName
返回的是一个 Function
对象,
然后在全局环境下执行这个函数(没有指定对象),就会以全局对象 window
作为其 this
相当于
var f = object.getName;
f(); // 注意不是 object.f()
如果这样写可能会更清晰一点
var name = "window";
var f = function(){
return this.name;
};
var object = {
name: "My object",
getName: f
};
var f2 = object.getName; // f2 === f
f2(); // 与 f(); 等同
object.getName = object.getName
是一个等号运算符,返回的时候getName
本身
你可以尝试用
var a={x:11},b={y:12};
console.log(a=b)结果是{y:12};
这里的object.getName
就是
function(){
return this.name;
}
当返回这个匿名函数的时候 ,他是在window
域下的 而不是在 object
域下
所以结果就是 window//window.name='window'
可以参考 http://.com/a/1190000003860689