关于this对象

石倩蓉 2015-07-22 09:29:13
var name="window";
var object={
name:"my object",
getName:function(){
return this.name;
}
};
console.log(object.getName());
console.log((object.getName)());
console.log((object.getName=object.getName)());//不明白为什么这个this指向就变了呢?
...全文
191 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
crystalis 2015-07-24
  • 打赏
  • 举报
回复
1:赋值语句--不仅会赋值,而且会产生一个对象的引用。 第三个与下面的是类似的 var name="the window" ; var object={ name:"my object", getName:function(){ return this.name; } }; var b=(object.getName=object.getName); console.log(b()); //the window 2:括号的作用。 1:函数调用 2:不同值的组合。 1:如果在一个 是 (function (){})(); 括号会将函数声明转换为函数表达式 2: .[ ] ( ) 具有相同的优先级 ,根据规则 具有相同优先级的运算符按从左至右的顺序计算。 因此。。 (object.getName)() 相当于 object.getName(); ---解释了第一个和第二个为什么都是my object
nmyangym 2015-07-23
  • 打赏
  • 举报
回复
http://bbs.csdn.net/topics/390896632 这个帖子也讲了这个问题。
sydhr_1994 2015-07-22
  • 打赏
  • 举报
回复
()()加上这个立即执行函数之后。 this指向window
xuzuning 2015-07-22
  • 打赏
  • 举报
回复
object.getName 是 function(){ return this.name; } (object.getName)() 就是 (function(){ return this.name; })() 补上缺省的 window 就是 window.(function(){ return this.name; })() 这样还有问题吗?
lynnlovemin 2015-07-22
  • 打赏
  • 举报
回复
第一个是指向object,第二个是指向getName
石倩蓉 2015-07-22
  • 打赏
  • 举报
回复
引用 2 楼 xuzuning 的回复:
object.getName 是 function(){ return this.name; } (object.getName)() 就是 (function(){ return this.name; })() 补上缺省的 window 就是 window.(function(){ return this.name; })() 这样还有问题吗?
第一个和第二个输出的是“My Object” 第三个输出的是“The window”,我怎么觉得你解释的是第二个呢,但是第二个this是指向object的对象的啊
sydhr_1994 2015-07-22
  • 打赏
  • 举报
回复
()() 在这种函数表达式直接执行的情况,第一个括号内的函数表达式如果进行赋值操作,this在赋值过程中 得不到维持,所以this指向window。书上写的

87,954

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧