javascript私有变量在原型实现中是如何工作的
这个网站展示了一个例子javascript私有变量在原型实现中是如何工作的,javascript,inheritance,closures,prototype,Javascript,Inheritance,Closures,Prototype,这个网站展示了一个例子 function Circle(radius) { this.getRadius = function() { return radius; }; this.setRadius = function(value) { if (value < 0) { throw new Error('radius should be of positive value'); } radius = value; }; }
function Circle(radius) {
this.getRadius = function() {
return radius;
};
this.setRadius = function(value) {
if (value < 0) {
throw new Error('radius should be of positive value');
}
radius = value;
};
}
功能圆(半径){
this.getRadius=函数(){
返回半径;
};
this.setRadius=函数(值){
如果(值<0){
抛出新错误(“半径应为正值”);
}
半径=值;
};
}
vs
Circle.prototype.getRadius=函数(){
返回这个;
};
Circle.prototype.setRadius=函数(值){
如果(值<0){
抛出新错误(“半径应为正值”);
}
此值为._半径=值;
};
在这一页上写着
“然而,在这种情况下,我们失去了拥有真正私人成员的奢侈,不得不求助于其他手段,如通过约定(加下划线的财产名称)来表示隐私。这通常归结为在拥有真正私人成员或拥有更高效的实施之间做出选择。”
使用prototype如何做到这一点?prototype失去了“真正私有”成员的特权吗?这不被视为对自身的引用吗?如果对象上的属性对prototype对象上的函数中的代码可见,它对任何地方的代码都是可见的。如果对象上的属性对原型对象上的函数中的代码是可见的,那么它对任何地方的代码都是可见的。因为变量this.\uu是圆实例上设置的属性,因此可以从对象访问
var c = new Circle();
c.setRadius(100);
console.log( c._radius );//100
因此,它不是一个真正的私有变量,只是按照惯例,任何以u开头的变量都不应在外部使用。因为变量this.u是圆实例上的属性集,因此可以从对象访问
var c = new Circle();
c.setRadius(100);
console.log( c._radius );//100
因此,它不是一个真正的私有变量,只是按照惯例,任何以u开头的变量都不应该在外部使用。ic,因此,如果不使用这个关键字this,就无法创建实例变量。radius,如果您使用var radius,它就不会这样做了?不必在此基础上定义任何实例变量。var _radius是定义它的函数的局部变量。ic,因此,如果不使用此关键字this,则无法执行实例变量。如果执行var _radius,则不会执行?不必在此基础上定义实例变量。var _radius是一个局部变量,它位于定义它的函数的局部。