Javascript setter 功能与原型

Javascript setter function with prototyping

我正在学习Javascript。当我尝试将 setter 与原型一起使用时,出现错误

TypeError: cir1.radiusToCircle is not a function

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);

我在这里错过了什么?

提前致谢。

你正在做的可能有用,但我不知道你正在使用的 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;
}

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

cir1.radiusToCircle = 14;