Javascript setter功能与原型

时间:2017-11-14 04:28:28

标签: javascript prototype getter-setter setter

我正在学习Javascript。当我尝试使用带原型设置的setter时,我收到错误

  

TypeError:cir1.radiusToCircle不是函数

var Circle = function(radius){
    this._radius = radius;
}

//prototype

Circle.prototype ={
    set radiusToCircle(rad) { this._radius = rad; },
    get radiusFromCircle() { return this._radius;},

    get area() { return (Math.PI * (this._radius * this._radius));}
};

var cir1 = new Circle(5);

cir1.radiusToCircle(14);

我在这里缺少什么?

提前致谢。

2 个答案:

答案 0 :(得分:1)

你在做什么可能有用,但我不知道你正在使用的set / get命令以及是否重载该函数是一个好主意。

从文档中,看起来set / get将绑定一个回调,当你直接分配成员变量时,它将运行一些不相关的代码。如果那是你想要做的,你就不需要原型功能。

var Circle = function(radius){
    this._radius = radius;
}

Circle.prototype.getRadiusToCircle = function() {
    return this._radius;
}

Circle.prototype.setRadiusToCircle = function(rad) {
    this._radius = rad;
}

Circle.prototype.overloadRadiusToCircle = function(rad) {
    if(rad != null) {
        this._radius = rad;
    } else {
        return rad;
    }
}

Circle.prototype.area = function() {
    return (Math.PI * (this._radius * this._radius));
}

例如

var Circle = function(radius){
    this._radius = radius;
    this._area = Math.PI * (radius * radius);
}

Circle.prototype = {
    set _radius(radius) {
        this._area = Math.PI * (radius * radius);
    }   
}

Circle.prototype.getArea = function() {
    return _area;
}

答案 1 :(得分:1)

要使用setter,您需要直接设置属性,而不是像函数参数一样传递它。 Setter MDN Docs

cir1.radiusToCircle = 14;