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)();
展开
 我来答
这人是胖子
2021-11-25
知道答主
回答量:1
采纳率:0%
帮助的人:428
展开全部

因为赋值表达式本身是有返回的,object.getName=object.getName赋值表达式返回的是object.getName指向的那个函数,直接对赋值表达式的结果进行调用就等于是在全局作用域中调用了一个函数,此时函数中的this就指向全局作用域变量,所以此时this不能维持

handangaoyang
2012-12-20 · TA获得超过2242个赞
知道大有可为答主
回答量:2633
采纳率:88%
帮助的人:927万
展开全部
你贴出的代码是不是不全?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

你看下。我们就用这段代码来讨论讨论。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xfree4k
2012-12-20
知道答主
回答量:24
采纳率:0%
帮助的人:16.5万
展开全部
(object.getName=object.getName)(); // 这样调用表示后 this 变为 window 对象了。
// 你可以在前面加一行代码
window.name = 'Window Name';// 在看发现输出的值是Window Name;

// 如果你要让object做为这个this,你可以这样做:
(object.getName=object.getName).call(this);
追问
(object.getName=object.getName)(); // 这样调用表示后 this 变为 window 对象了。
我就是问这里为什么的this不能维持,而转而指向window了~
追答
JS解析器是这样解析的,JS内置的解析。
--
建议:多研究其他的问题,不要把时间浪费在这个上面。在实际应用中不会像你这样写的,这样写没有意义哈- -!
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
摩惠然0iD
2012-12-20 · TA获得超过1634个赞
知道小有建树答主
回答量:1162
采纳率:100%
帮助的人:839万
展开全部
(object.getName=object.getName)();

===
(function(){return this.name})() this指向全局对象

你可以修改(object.getName=object.getName)的对象
可以这样写(object.getName=object.getName).apply(object) this指向object

不过这样做有意义么,不懂
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式