构造函数的原型对象被改变后,用此构造函数创建的对象的constructor属性不在指向最初的构造函数?

红有三Evan 2014-08-04 03:29:54

/**
* Created by Evan on 14-8-4.
* 本次实验用于测试“构造函数的原型对象改变后,构造出来的对象是否还指向这个最初的构造函数”
*/

function Person(){
this.name="Jack";
}
Person.prototype.sayName=function(){
return this.name;
}

function Student(){
this.job="student";
}
Student.prototype=new Person();
Student.prototype.sayJob=function(){
return this.job;
};

var stu=new Student();

下面是在控制台看到的信息


《JavaScript高级程序设计第三版》看的有点疑惑。在164页的一些内容可概括为:子类的原型对象改为父类实例后,其constructor也指向父类构造函数。其原因并不是子类constructor被改,而是因为子类原型对象是父类实例,父类实例constructor指向父类原型对象。
这似乎又和之前的原型链说法有些矛盾:第164页有“当读取模式访问一个实例属性时,首先会在实例中搜索该属性。如果没有找到该属性,则会继续搜索实例原型”。
stu构造时由Student函数来构造,constructor属性应该本来就存在,应该不会出现“如果没有找到该属性,则会继续搜索实例原型”这个情况,请问为什么构造完后constructor会指向Person?
...全文
289 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
红有三Evan 2014-08-05
  • 打赏
  • 举报
回复
我之前想的是:因为 stu 对象由 Student函数构造,所以stu的constructor属性应该指向Student函数。 但stu构造前,Student函数的原型对象已经改为Person类的实例。 根据结果来看,Student函数构造stu对象时,应该是根据自身原型对象来赋予新构造对象的属性、方法的。 不知这样想是否正确?
似梦飞花 2014-08-04
  • 打赏
  • 举报
回复
这就好比一个对象a 有一个constructor属性 你给这个对象添加其他属性只要不修改constructor自然constructor没问题了 但当a指向另外一个对象时 a就算不是原来的a了阿 a的constructor就没了阿 正好那个对象也有个constructor 这时a的constructor不就是另外的那个对象的了吗
豪情 2014-08-04
  • 打赏
  • 举报
回复
164页有个图6-5,或翻几页有个图6-6认真看一下。

87,994

社区成员

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

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