var name = "window";
var object = {
name: "My object",
getName: function(){
return this.name;
}
};
//这里不明白,为什么会返回window,书上说this的值不能得到维持,为什么啊
(object.getName = object.getName)(); //"window"在非严格模式下;
var name = "window";
var object = {
name: "My object",
getName: function(){
return this.name;
}
};
//这里不明白,为什么会返回window,书上说this的值不能得到维持,为什么啊
(object.getName = object.getName)(); //"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)();//"window"
其实就是个赋值表达式将作为object的getName属性的函数返回了,再以普通函数的形式调用,此时函数内的this即全局对象,所以输出 window
8 回答4.7k 阅读✓ 已解决
6 回答3.4k 阅读✓ 已解决
5 回答2.8k 阅读✓ 已解决
5 回答6.3k 阅读✓ 已解决
4 回答2.3k 阅读✓ 已解决
4 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
object.getName = object.getName
是一个等号运算符,返回的时候getName
本身你可以尝试用
这里的
object.getName
就是当返回这个匿名函数的时候 ,他是在
window
域下的 而不是在object
域下所以结果就是
window//window.name='window'
可以参考 http://segmentfault.com/a/1190000003860689