JavaScript:原型函数中的私有变量
JavaScript: Private variables in prototype function
我使用原型函数是因为当"类"被多次实例化时,它们应该具有更好的性能。此外,并不是所有的变量都应该是外部可访问的,所以它们是通过var
在"类"内部定义的,所以在闭包空间之外的任何地方都不可访问。
现在我有一个简单的例子,我定义了一个"私有"变量,并为它定义了set和get函数
示例:
function Test() {
var hello = "org";
this._get = function (value) {
hello = value;
}
this._set = function (value) {
return hello;
}
}
var test = new Test();
console.log(test._get());
test._set("new");
console.log(test._get());
小提琴手:http://jsfiddle.net/LdwuS/
现在我想对原型做同样的事情,但get函数总是返回undefined!
示例:
function Test() {
var hello = "org";
}
Test.prototype.set = function (value) {
return hello;
}
Test.prototype.get = function (value) {
hello = value;
}
var test = new Test();
console.log(test.get());
test.set("new");
小提琴手:http://jsfiddle.net/rK22m/
我是做错了什么,还是这不可能?console.log(test.get());
与原型对象关联的函数与任何其他函数具有完全相同的对象访问权限。此外,与其他函数一样,它们对构造函数调用时存在的局部变量没有访问权限。
不幸的是,您根本无法实现您想要实现的目标,因为在JavaScript中创建可以访问私有变量的公共函数的唯一方法是在与私有变量相同的范围内声明函数,以便函数在这些范围上创建闭包,然后公开函数。
你必须做出选择,要么牺牲使用原型的好处,要么牺牲强制隐私。一种被广泛采用的解决方案是依靠文档来标识私有属性,或者在它们前面加上像_
这样的字符。但是,您总是可以将某些功能设置为完全私有。
var MyClass = (function () {
function MyClass() {
//private
this._private = 'private';
this.public = 'public';
//call privateFunction in the context of the current instance
privateFunction.call(this);
}
//public functions
MyClass.prototype.publicFunction = function () {
};
//private function
function privateFunction () {
}
return MyClass;
})();
http://jsfiddle.net/uy38G/
这样做可以实现
function Test(){
var hello = "org";
this.getHello = function(){
return hello;
}
this.setHello = function(value){
return hello = value;
}
}
var test = new Test();
console.log(test.getHello());
test.setHello('new org');
console.log(test.getHello());
相关文章:
- 引用类变量中的原型方法
- 为什么原型允许多个实例共享变量
- 创建所有原型函数均可访问的局部变量
- 如何使用Javascript扩展对象'的原型使用声明中的变量
- 原型Javascript中的错误“;类别“-不是函数和未定义的变量
- 使变量继承现有原型的方法
- 揭示原型模式私有变量
- 为什么允许通过原型继承访问另一个闭包范围内的私有变量
- 使用原型模拟静态变量
- 使用原型访问局部变量
- 由于变量范围,requireJS丢失了原型
- 声明有和没有原型的变量有什么区别
- Javascript:复制的变量和原型
- 如何在嵌套原型中访问 JavaScript 构造函数变量
- AngularJS ng-models使用中继器中的原型变量
- 从 JavaScript 动画对象原型设置变量
- JavaScript:在构造函数中使用原型函数更改变量
- 原型继承JavaScript在不同函数中使用变量
- JavaScript原型变量创建引用
- 在原型函数中更改时更新数值变量