在"原型"中设置"构造函数"属性的优点

Fat*_*cet 16 javascript inheritance constructor prototype

在JavaScript Prototype继承中,添加prototype.constructor属性的目标是什么.让我举个例子来解释一下.

var Super = function() {
    this.superProperty = 'Super Property'
}
var Sub = function() {
    this.subProperty = 'Sub Property'
}

Sub.prototype = new Super();
Sub.prototype.constructor = Sub; // advantages of the statement

var inst = new Sub();

在添加Sub.prototype.constructor = Sub时,以下行在所有情况下都返回true.

console.log(inst instanceof Sub)   // true
console.log(inst instanceof Super) // true

我猜,它在获取新实例时可能会有用但是何时和/或如何?

提前致谢.

And*_*y E 10

只是正确地重置constructor属性以准确反映用于构造对象的函数.

Sub.prototype = new Super();

console.log(new Sub().constructor == Sub);
// -> 'false' 

Sub.prototype.constructor = Sub;
console.log(new Sub().constructor == Sub);
// -> 'true' 
Run Code Online (Sandbox Code Playgroud)

  • @Yetanotherjosh:嗯,在OP的代码的情况下,如果他离开那条线,那么`inst.constructor === Super`,即使它用`new Sub()`实例化.如果您不关心该属性,这通常不会成为问题,但如果您与其他代码共享该实例,那么在某些情况下您可能会引起混淆,包括`new inst.constructor()`实际会导致在`Super()`而不是`Sub()`的实例中(因此它将缺少`Sub.prototype`独有的属性).**tl; dr这是一个很好的编程习惯**. (6认同)
  • 不设置它的后果究竟是什么?或者换句话说,Sub.prototype.constructor的值何时才真正重要?它似乎不会影响Sub的实例的创建,afaics.这必须是那些"如此明显"的事情之一,没有人真正说出来,因此它让我望而却步:-) (2认同)