代码之家  ›  专栏  ›  技术社区  ›  Sachith Muhandiram

带有原型的Javascript setter函数

  •  2
  • Sachith Muhandiram  · 技术社区  · 7 年前

    我正在学习Javascript。当我尝试在原型中使用setter时,我遇到了一个错误

    类型错误: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 回复  |  直到 7 年前
        1
  •  1
  •   ShadowCommander user    7 年前

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

    cir1.radiusToCircle = 14;
    
        2
  •  1
  •   Abdul Ahad    7 年前

    您所做的可能会起作用,但我不知道您正在使用的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;
    }