一尘不染

Javascript构造函数属性的意义是什么?

javascript

试图屈服于Javascript对OO的追求,并且像其他许多人一样,对该constructor属性感到困惑。特别是,constructor属性的重要性,因为我似乎无法使其发挥任何作用。例如:

function Foo(age) {
    this.age = age;
}

function Bar() {
    Foo.call(this, 42);
    this.name = "baz"; 
}

Bar.prototype = Object.create(Foo.prototype); 
var b = new Bar;

alert(b.constructor); // "Foo". That's OK because we inherit `Foo`'s prototype.
alert(b.name);        // "baz". Shows that Bar() was called as constructor.
alert(b.age);         // "42", inherited from `Foo`.

在上面的示例中,该对象b似乎具有名为(Bar)的正确构造函数-并且它继承了的age属性Foo。那么为什么很多人建议将此作为必要步骤:

Bar.prototype.constructor = Bar;

显然,在Bar构造
调用了正确的构造函数b,那么这个原型属性有什么影响?我很想知道“正确设置”构造函数的属性会对实际产生什么影响,因为我看不到它对创建对象后实际调用哪个构造函数有任何影响。


阅读 416

收藏
2020-04-25

共1个答案

一尘不染

constructor属性对内部任何事物都完全没有实际的区别。仅当您的代码明确使用它时,它才有用。例如,您可能决定需要每个对象都具有对创建它的实际构造函数的引用。如果是这样,那么constructor在设置继承时,您需要通过将一个对象分配给构造函数的prototype属性来显式设置属性,如您的示例。

2020-04-25