JavaScript中,为什么赋值表达式的值是函数本身,this的值不能得到维持呢?
varobject={name:'MyObject',getName:function(){returnthis.name}};(object.getName=objec...
var object={name:'My Object',getName:function(){return this.name}};
(object.getName=object.getName)(); 展开
(object.getName=object.getName)(); 展开
4个回答
展开全部
你贴出的代码是不是不全?this值得不到维持,一般都是在闭包中。需要重新申明一个变量,把当前this保存起来。
更多追问追答
追问
嗯,我知道要维持this的话,可以申请一个变量来保存this的值才付给闭包函数,只是不知道为什么下面那行代码在自己给自己重新赋值的时候,为什么会造成this不能维持的现象。
还有代码就差一行,var name='The Window';也就是全局的name变量,感觉对整体影响不大,就没写出来。
追答
我对你说的this不能维持的现象,不太理解。
我的代码
var name = "window";
var object =
{
name: 'My Object',
getName: function () {
//alert(this.name);
return this.name
}
};
//alert(this.name);
(object.getName = object.getName)();
alert(this.name); //window
你看下。我们就用这段代码来讨论讨论。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
(object.getName=object.getName)(); // 这样调用表示后 this 变为 window 对象了。
// 你可以在前面加一行代码
window.name = 'Window Name';// 在看发现输出的值是Window Name;
// 如果你要让object做为这个this,你可以这样做:
(object.getName=object.getName).call(this);
// 你可以在前面加一行代码
window.name = 'Window Name';// 在看发现输出的值是Window Name;
// 如果你要让object做为这个this,你可以这样做:
(object.getName=object.getName).call(this);
追问
(object.getName=object.getName)(); // 这样调用表示后 this 变为 window 对象了。
我就是问这里为什么的this不能维持,而转而指向window了~
追答
JS解析器是这样解析的,JS内置的解析。
--
建议:多研究其他的问题,不要把时间浪费在这个上面。在实际应用中不会像你这样写的,这样写没有意义哈- -!
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
(object.getName=object.getName)();
===
(function(){return this.name})() this指向全局对象
你可以修改(object.getName=object.getName)的对象
可以这样写(object.getName=object.getName).apply(object) this指向object
不过这样做有意义么,不懂
===
(function(){return this.name})() this指向全局对象
你可以修改(object.getName=object.getName)的对象
可以这样写(object.getName=object.getName).apply(object) this指向object
不过这样做有意义么,不懂
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询