函数的原型属性如何影响对象的构造函数属性

how does prototype property of function effects the constructor property of an object?

本文关键字:属性 影响 对象 构造函数 何影响 原型 函数      更新时间:2023-09-26

我有下面的代码片段

function Dad(){
  this.name="i am dad";
}
function Son(){
   this.nameOfChild="child";   
}
var sonBeforeInheritance= new Son();
alert(sonBeforeInheritance.constructor);  //outputs Son class
//inheritance done
Son.prototype= new Dad();
var sonObj= new Son();
alert(sonObj.constructor); //outputs Dad class    
alert(sonBeforeInheritance.constructor);  //outputs Son class

我的理解请回答正确/错误和解释:

  1. 虽然js中的函数也是对象,但是用new关键字prototype object创建的对象是唯一可以访问属性constructorsonObj的对象。constructor和Son.prototype。构造函数是有效的
  2. js中的
  3. 函数有一个名为prototype的对象,该对象用new关键字定义不具有,即sonObj上面的sonObj不具有prototypesonObj。
  4. 现在构造函数指向用于创建对象的类?如果是真的,那么为什么sonObj。构造函数给我爸爸类?有人可能会说,Son的原型已经改变了,那就是Son.prototype。构造函数"instance of Son"。构造函数指向同一个对象?
  5. 为什么我要写Son.prototype。构造函数=子继承后?

虽然js中的函数也是对象,但是对象本身就是对象用new关键字和原型对象创建的可以访问名为constructor

的属性

。js中的大多数对象都有一个.constructor属性,它们从原型中继承了它。同样,由{}创建的普通对象从Object.prototype继承,它们的.constructor将指向Object,就像数组从Array.prototype继承.constructor == Array或函数从Function.prototype继承.constructor == Function一样。它们不一定需要由new创建。

js中的

函数有一个对象叫做原型,用new关键字定义的对象没有。上面的sonObj没有原型,也就是sonObj。原型是"定义"

正确的。这就是.prototype的工作原理。

现在构造函数指向的类是用来制造物体?

不一定。.constructor是原型上的一个普通属性,因此它将被实例继承,并且初始化为原型对象所属的函数。.prototype.constructor都是可重写的。

如果为真,那么为什么sonObj。构造函数给了我爸爸课吗?

因为你用一个对象覆盖了Son.prototype,这个对象的.constructor属性不是Son,而是继承的值Dad(你把它改成了new Dad实例——有问题,顺便说一句)

有人可能会说,原型的儿子已经改变了,然后是Son.prototype.constructor和"instance of Son"。构造函数指向相同的对象?

是的。

为什么我要写Son.prototype。构造函数=儿子后继承?

修复它并使其像您最初期望的那样工作。