这个JavaScript代码中的this为啥和文档说明不一致呢?

wangtao19900521 2017-03-09 06:32:52
您好,我是一名前端小萌新,最近看到以下代码非常不理解。。。

为啥changeName()里的那个this和person()里的this,指的都是person对象呢?我看W3C文档里讲this指的应该是它本身这个函数对象呀(即指changeName),不理解啊。。。求路过的大神点拨一下,不胜感激!


function person(firstname,lastname,age,eyecolor)
{
this.firstname=firstname;
this.lastname=lastname;
this.age=age;
this.eyecolor=eyecolor;

this.changeName=changeName;
function changeName(name)
{
this.lastname=name;
}
}
...全文
186 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
蚂蚁上树 2017-03-10
  • 打赏
  • 举报
回复
你的changeName写在person里面了 所以指向person
forwardNow 2017-03-10
  • 打赏
  • 举报
回复
谁调用,this 就指向谁。 function foo() { console.info( this ); } foo(); // window.foo(),this指向 window var obj = { func: foo }; obj.func(); // this 指向 obj
顾小林 2017-03-10
  • 打赏
  • 举报
回复
看一下 apply
silentcross 2017-03-10
  • 打赏
  • 举报
回复
“我看W3C文档里讲this指的应该是它本身这个函数对象呀 ” 瞎扯,this始终是指向函数的调用者,没有指定调用者就是window对象
  • 打赏
  • 举报
回复
作为方法的函数里的this,要看调用它的的对象。也就是说执行上下文不是函数定义的时候决定,而是执行的时候
似梦飞花 2017-03-09
  • 打赏
  • 举报
回复
方法里的this是和调用上下文有关的
v逆水行舟v 2017-03-09
  • 打赏
  • 举报
回复
其实你这个this.changeName = changeName是这样的 function person(firstname,lastname,age,eyecolor)  {      this.firstname=firstname;      this.lastname=lastname;      this.age=age;      this.eyecolor=eyecolor;        this.changeName = function (name)      {            this.lastname=name;      }  } 当你调用的时候是这样的 var p = new person('张', ‘三’, 20, 'black'); 这时你创建了person实例p, 当你调用p.changeName()时,这时候this就指向了p这个实例对象,因此你可以调用lastname、age等等属性。
xiaojunjor 2017-03-09
  • 打赏
  • 举报
回复
对啊,changeName就是个函数啊,也没创建对象啊。如果new changeName的话里面的this就指向changeName的对象了

87,989

社区成员

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

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