【发布时间】:2018-11-26 10:15:15
【问题描述】:
我有以下课程
class Polygon {
constructor(height, width) {
this.height = height;
this.width = width;
}
}
class Square extends Polygon {
constructor(sideLength) {
super(sideLength, sideLength);
}
area() {
return this.height * this.width;
}
sideLength(newLength) {
this.height = newLength;
this.width = newLength;
}
}
我创建了一个 Square 类的实例
var square = new Square(2);
我的期望是在方形对象中(直接在其中而不是在其原型中)找到area 和sideLength 方法。不同的是,我在 __proto__ 对象中找到了它们。
我不明白为什么会这样。 您可以使用构造函数而不是类来“翻译”相同的代码吗?也许这样我会更容易明白这一点......
【问题讨论】:
-
这是拥有类的要点之一 - 让对象共享一个公共的单个内部原型对象(此处为
Square.prototype,与square.__proto__或Object.getPrototypeOf(square)相同) - 而不是每个新对象都有自己的方法 -
ES6 仍然使用原型链,类只是语法上的糖。编辑:请阅读stackoverflow.com/questions/36419713/…了解更多信息。
标签: javascript ecmascript-6 es6-class