首页 > 网站 > WEB开发 > 正文

javascript有关this的那些事(某渣提出的问题)

2024-04-27 14:10:56
字体:
来源:转载
供稿:网友

javascript有关this的那些事(某渣提出的问题)

某人提出

请教下谁能解释下这个值varname="TheWindow";varobject={name:"MyObject",getName:function(){returnthis.name;}};alert((object.getName=object.getName)());--------TheWindow

经过解释之后

object.getNameFunc()();我理解是thewindow,但是(object.getName=object.getName)()怎么也是thewindow呢?

vara=1;a=a返回啥,你就知道为什么是thewindow了

最后某神举例

varname="TheWindow";  varobject={    name:"MyObject",    getNameFunc:function(){        returnthis.name;    }};vara=object.getNameFunc;alert(a());//TheWindowalert(object.getNameFunc()); //MyObject

最后某神解释

因为a()实际上是window.a()所以执行a()的时候this指向windowthis.name就是window.name

object.getName=object.getName;alert(object.getName());//MyObjectalert((object.getName=object.getName)());//"TheWindow"还是不明白为啥第一个是obj第二个是window

这个解释怎么理解啊

最后他明白了

某渣:我大概明白了 执行

alert((object.getName = object.getName)); 返回function () { return this.name; }这里this 就是window了

额,对的某渣:是吧就是这某渣:就是一对()返回一个函数(object.getName=object.getName)返回的实际上是=运算的结果某渣:多谢大家

圆满解决

某神总结

当一个函数作为函数而不是方法来调用的时候,this指向的是全局对象当函数作为某个对象的方法来调用时,this指向那个对象

object.getNameFunc() ,此时的 object.getNameFunc 为引用类型,其 base 为 object,this 指向的是 base,所以返回 object.name 的值name = object.getNameFunc, test 作为标识符,生成了其他引用类型的值,此时 base 已经从 object 重置为 null,也就是会指向 global(window),所以返回的是 window.name 的值。问题的关键在于「引用类型(type Reference)的中间值发生改变」


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表