我一直在javascript中玩耍,现在我一直在玩Object.create,我得到了这个场景
var Car = function() {
this.constructor = function(value) {
this._val = value;
this.accelerate = false;
};
};
Car.prototype.accelerate = function() {
this.accelerate = true;
};
Car.prototype.getVal = function() {
return this._val;
};
var myCar = Object.create(Car);
如果我尝试myCar.getVal()不起作用,我得到一个错误,说该方法在该对象中不存在?为什么会这样?最后哪个是使用Object.create()的正确方法?
最好的问候。答案 0 :(得分:4)
您永远不会在Car
内拨打this.constructor
或您分配给Car
的功能,因此其中的代码永远不会运行,您也看不到{{1} }或_val
任何对象。
你完成它的方式通常不是你如何做构造函数。通常情况是accelerate
构造函数,例如:
Car
当然,使用构造函数,您不需要使用var Car = function(value) { // Added parameter, otherwise `value` was coming from nowhere
this._val = value;
this.accelerating = false; // Side note: Changed so it doesn't conflict with the method
};
。只需通过Object.create
调用该函数:
new
这大致相当于:
var myCar = new Car(42);
通常当你使用var myCar = Object.create(Car.prototype);
Car.call(myCar, 42);
时,你没有像构建器这样的构造函数,如下所示:
Object.create