javascript - 第二个参数 Object.create

标签 javascript class ecmascript-5

我的期望是用新的 toString 方法覆盖 Vehicle 的 toString 方法。但是这似乎不起作用,我不知道为什么。根据这篇文章,它看起来应该 https://strongloop.com/strongblog/an-introduction-to-javascript-es6-classes/ (向下滚动到类扩展)

function Vehicle(make, year) {
  this.make = make;
  this.year = year;
}

Vehicle.prototype.toString = function() {
  return this.make + ' ' + this.year;
};

var vehicle = new Vehicle('Toyota Corolla', 2009);

function Motorcycle(make, year) {
  Vehicle.apply(this, [make, year]);
}

Motorcycle.prototype = Object.create(Vehicle.prototype, {
  toString: function() {
    return 'Motorcycle ' + this.make + ' ' + this.year;
  }
});

Motorcycle.prototype.constructor = Motorcycle;

var motorcycle = new Motorcycle('harley', 2010);
console.log(motorcycle.toString()); //TypeError

最佳答案

作为 Object.create 的第二个参数给出的属性对象应该包含属性描述符,而不仅仅是值。这更正了问题:

Motorcycle.prototype = Object.create(Vehicle.prototype, {
  toString: {
    configurable: true, enumerable: true, writable: true, 
    value: function() {
      return 'Motorcycle ' + this.make + ' ' + this.year;
    }
  }
});

另见 MDN reference for Object.create .

关于javascript - 第二个参数 Object.create,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44123138/

相关文章:

javascript - 在计算机上禁用 HammerJS 滑动和拖动事件? (即禁用鼠标事件?)

css - 如何使用 CSS 设置 HTML 样式?

javascript - 在 JavaScript 中,Object.keys().forEach() 的内存效率是否低于简单的 for...in 循环?

javascript - 为什么 Babel 需要 polyfill 而不是默认转译某些方法?

javascript - AngularJS Controller 在注入(inject)工厂时抛出错误

c# - Fancytree 没有加载 ajax 请求

JavaScript knockoutjs,设置嵌套对象值不会更新 Html?

python - 在自定义类中实现 __next__

c++ - whitecards(小写)跳过 PlayerVector 中的其他玩家,但第一个 - 为什么?

javascript - 如何在 JavaScript 中以字符串形式返回参数?