试图屈服于Javascript对OO的追求,并且像其他许多人一样,对该constructor属性感到困惑。特别是,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。那么为什么很多人建议将此作为必要步骤:
b
Bar
Foo
Bar.prototype.constructor = Bar;
显然,在Bar构造 时 调用了正确的构造函数b,那么这个原型属性有什么影响?我很想知道“正确设置”构造函数的属性会对实际产生什么影响,因为我看不到它对创建对象后实际调用哪个构造函数有任何影响。
该constructor属性对内部任何事物都完全没有实际的区别。仅当您的代码明确使用它时,它才有用。例如,您可能决定需要每个对象都具有对创建它的实际构造函数的引用。如果是这样,那么constructor在设置继承时,您需要通过将一个对象分配给构造函数的prototype属性来显式设置属性,如您的示例。
prototype