Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有原型的Javascript设置器函数_Javascript_Prototype_Getter Setter_Setter - Fatal编程技术网

带有原型的Javascript设置器函数

带有原型的Javascript设置器函数,javascript,prototype,getter-setter,setter,Javascript,Prototype,Getter Setter,Setter,我正在学习Javascript。当我尝试将setter与原型一起使用时,我得到了一个错误 TypeError:cir1.radiusToCircle不是函数 我错过了什么 提前感谢。您所做的可能会起作用,但我不知道您正在使用的set/get命令以及是否重载函数是一个好主意 从文档中可以看出,set/get将绑定一个回调,当您直接分配成员变量时,该回调将运行一些不相关的代码。如果您正试图这样做,则不需要原型函数 var Circle = function(radius){ this._ra

我正在学习Javascript。当我尝试将setter与原型一起使用时,我得到了一个错误

TypeError:cir1.radiusToCircle不是函数

我错过了什么


提前感谢。

您所做的可能会起作用,但我不知道您正在使用的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,您需要直接设置属性,而不是像函数参数那样传递属性


cir1.radiusToCircle=14
@Tushar My bad,你能把它作为一个答案发布并解释一下吗。检查MDN@Andrew上的示例集语法在对象文本中工作。因此,将其放在原型中是合乎逻辑的。属性和setter不能同时具有相同的名称。你让事情变得更复杂了。OP的代码是100%正确的,请参考另一个答案,该答案有一个指向文档的链接,您不能在这样的构造函数中使用
set
。它只适用于对象文本,因此必须像OP正在做的那样添加到原型声明中。请参考OP的问题。他的代码是100%正确的OK,我把set命令移到了原型中——以前从未使用过set。OP是正确的,但不需要使用set命令,该命令在问题中不起任何作用。set命令用于将回调绑定到属性更改。
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;
}
cir1.radiusToCircle = 14;