这似乎已被许多人讨论过。但不幸的是,我找不到我的问题的答案。 这是一段关于Javascript继承的代码(来自一本书):
function Car() {
var self = this;
self.type = "Car"
self.go = function() {
console.log("Going...");
};
};
Toyota = function() { console.log("Original called"); };
Toyota.prototype = new Car();
Toyota.prototype.constructor = function() {
var self = this;
self.type = "Toyota";
self.go = function() {
console.log("A Toyota car is going...");
}
};
Toyota.prototype.isJapaneseCar = true;
function TestCar() {
console.log("Toyota.prototype.constructor: " + Toyota.prototype.constructor);
var t = new Toyota();
console.log("t.constructor: " + t.constructor);
console.log(t.type);
};
Firefox控制台中的输出:
Toyota.prototype.constructor: function () {
var self = this;
self.type = "Toyota";
self.go = function () {
console.log("A Toyota car is going...");
};
}
Original called
t.constructor: function () {
var self = this;
self.type = "Toyota";
self.go = function () {
console.log("A Toyota car is going...");
};
}
Car
从输出中显示新丰田()电话:
var t = new Toyota();
没有按预期调用 Toyota.prototype.constructor 函数,而是仍然调用首先定义的函数:
Toyota = function() { console.log("Original called"); };
具有高upvote计数的post给出了相当详细的解释和示例:它说“ 3.它执行构造函数,只要提到这个就使用新对象。”提到的“构造函数”是否引用prototype.constructor?以下3行如何相关:
[编辑]最让我困惑的是为什么当我打电话给新的Toyota()时,没有调用构造函数(Toyota.prototype.constructor)
答案 0 :(得分:2)
constructor
对象中的prototype
属性包含对构造该类型对象的实例的函数的引用。希望我不要在这里混淆。
对于字符串对象,您会看到constructor
属性引用String
函数(非正式的a.k.a构造函数。)
console.log("".constructor); // would print function String() { [native code] }
这就是我们通常将类(即函数)constructor
属性重新分配给它自己的原因。
Toyota.prototype.constructor = Toyota;
var t = new Toyota();
console.log(t.constructor); // prints function Toyota() { /* definition */ }
希望能回答你的问题。