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;
我正在学习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;