我有以下代码段
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
我的未知请用真/假和解释回答:
答案 0 :(得分:1)
虽然js中的函数也是对象,但是对象是 用新关键字和原型对象创建的是唯一的 可以访问名为constructor
的属性
没有。 js中的大多数对象都有.constructor
属性,它们从原型继承。此外,由{}
创建的普通对象继承Object.prototype
,而.constructor
的{{1}}将指向Object
,就像数组从.constructor == Array
继承Array.prototype
或函数从.constructor == Function
继承Function.prototype
。它们不一定需要由new
创建。
js中的函数有一个对象 调用原型,用新关键字定义的对象没有 sonObj上面没有原型,即sonObj.prototype是 "未定义"
真。那是how .prototype
works。
现在构造函数指向以前用过的类 做对象?
不一定。 .constructor
是原型上的普通属性,因此它将由实例继承,并且初始化成为原型对象所属的函数。但.prototype
和.constructor
都是可覆盖的。
如果为真,那么为什么sonObj.constructor会给我爸爸 类?
因为您已使用Son.prototype
属性不是.constructor
的对象覆盖了Son
,但是继承了值Dad
(您已对其进行了更改)成为new Dad
个实例 - questionable, btw)
有人可能会说Son的原型发生了变化 Son.prototype.constructor和" Son" .constructor的实例指向 同一个对象?
是
为什么我要写Son.prototype.constructor = Son 继承?
修复它并让它像您最初预期的那样工作。另请参阅What is the `constructor` property really used for?。