Object.create()与Prototype

时间:2013-07-26 13:06:28

标签: javascript prototype prototypal-inheritance

我一直在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()的正确方法?

最好的问候。

1 个答案:

答案 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