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

红有三Evan 红有三Evan 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

/**
* 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?
...全文

相关推荐

深入理解javascript构造函数和原型对象

对象,是javascript中非常重要的一个梗,是否能透彻的理解它直接关系到你对整个javascript体系的基础理解,说白了,javascript就是一群对象在搅。。(哔!)。

weixin_38666300

JavaScript精炼之构造函数 Constructor及Constructor属性详解

对象的constructor属性用于返回创建该对象的函数,也就是我们常说的构造函数,除了创建对象,构造函数(constructor) 还做了另一件有用的事情—自动为创建的新对象设置了原型对象(prototype object)

weixin_38697063

Javascript中获取对象的原型对象的方法小结

主要介绍了Javascript中获取对象的原型对象的方法小结,需要的朋友可以参考下

weixin_38738189

Javascript的构造函数和constructor属性

例如,在Chrome下调试如下程序,很清楚的展示了这点:   然而事情并不是这么简单。再看下面的代码: 很显然,这个时候obj的constructor已经不再是创建它的函数,注意到obj.name也是undefined,因此修改构造函数的prototype的contructor并不会影响构造函数所产生的对象。真正的原因是:一个对象的constructor是它的构造函数的prototype.constructor,而每一个函数都有一个prototype,默认情况下,这个prototype有一个constructor属性,指向的是它自己。 我觉得Javascript的设计本意是让每个对象的con

weixin_38695452

JS原型对象constructor详解[项目代码]

本文深入探讨了JavaScript原型对象中的constructor属性,详细介绍了其基本概念、用途与原理。constructor属性指向创建对象的构造函数,可用于确定对象来源和动态生成新实例。文章还分析了原型对象如何影响constructor属性,以及修改原型时可能遇到的问题和解决方案。此外,比较了constructor与instanceof操作符的关系与区别,并展示了constructor在类继承和动态生成对象中的实际应用场景。通过理解constructor属性,开发者可以更好地掌握JavaScript的原型继承机制,编写更具可读性和维护性的代码。

prometheus9mon
评论 3
收藏 已收藏
分享
返回顶部
红有三Evan
JavaScript 87,983 成员 224,681 内容