构造函数的原型对象被改变后,用此构造函数创建的对象的constructor属性不在指向最初的构造函数?
/**
* 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就是一群对象在搅。。(哔!)。
JavaScript精炼之构造函数 Constructor及Constructor属性详解
对象的constructor属性用于返回创建该对象的函数,也就是我们常说的构造函数,除了创建对象,构造函数(constructor) 还做了另一件有用的事情—自动为创建的新对象设置了原型对象(prototype object)
Javascript中获取对象的原型对象的方法小结
主要介绍了Javascript中获取对象的原型对象的方法小结,需要的朋友可以参考下
Javascript的构造函数和constructor属性
例如,在Chrome下调试如下程序,很清楚的展示了这点: 然而事情并不是这么简单。再看下面的代码: 很显然,这个时候obj的constructor已经不再是创建它的函数,注意到obj.name也是undefined,因此修改构造函数的prototype的contructor并不会影响构造函数所产生的对象。真正的原因是:一个对象的constructor是它的构造函数的prototype.constructor,而每一个函数都有一个prototype,默认情况下,这个prototype有一个constructor属性,指向的是它自己。 我觉得Javascript的设计本意是让每个对象的con
JS原型对象constructor详解[项目代码]
本文深入探讨了JavaScript原型对象中的constructor属性,详细介绍了其基本概念、用途与原理。constructor属性指向创建对象的构造函数,可用于确定对象来源和动态生成新实例。文章还分析了原型对象如何影响constructor属性,以及修改原型时可能遇到的问题和解决方案。此外,比较了constructor与instanceof操作符的关系与区别,并展示了constructor在类继承和动态生成对象中的实际应用场景。通过理解constructor属性,开发者可以更好地掌握JavaScript的原型继承机制,编写更具可读性和维护性的代码。


