【发布时间】:2020-03-21 23:03:17
【问题描述】:
我有来自Eric Faust ES6 class syntax sugar的以下代码:
function Circle(radius) {
this.radius = radius;
Circle.circlesMade++;
}
Circle.draw = function draw(circle, canvas) { /* Canvas drawing code */ }
Object.defineProperty(Circle, "circlesMade", {
get: function() {
return !this._count ? 0 : this._count;
},
set: function(val) {
this._count = val;
}
});
Circle.prototype = {
area: function area() {
return Math.pow(this.radius, 2) * Math.PI;
}
};
Object.defineProperty(Circle.prototype, "radius", {
get: function() {
return this._radius;
},
set: function(radius) {
if (!Number.isInteger(radius))
throw new Error("Circle radius must be an integer.");
this._radius = radius;
}
});
let x = new Circle("pippo");
而且我不明白为什么会启动异常。 setter 和 getter 方法与 radius 访问器属性上的原型 Circle.prototype 相关联,而不是当我创建 x 实例时,我也设置了 radius 属性,但在构造函数中,因此我希望 setter 和 getter 不是触发(再次因为实例上的radius 属性和原型上的radius 属性是在两个不同的对象上定义的)。在这种情况下,我想念 setter 和 getter 的工作方式。有人可以澄清一下吗?
还有一个无关紧要的小问题,是在构造函数Circle上定义static属性circlesMade还是在原型上定义更正确?
【问题讨论】:
标签: javascript