日期:2014-05-16  浏览次数:20387 次

作为一个js小白想问一个私有属性的问题

function A()
function A()
{
    var _a = "";
    A.prototype.getA = function(){return _a;};
    A.prototype.setA = function(a){_a = a;};
}
var a1 = new A();
var a2 = new A();
a1.setA("1");
a2.setA("2");
alert(a1.getA()); // 输出2
alert(a2.getA()); // 输出2



function A()
function A()
{
    var _a = "";
    this.getA = function(){return _a;};
    this.setA = function(a){_a = a;};
}
var a1 = new A();
var a2 = new A();
a1.setA("1");
a2.setA("2");
alert(a1.getA()); // 输出1
alert(a2.getA()); // 输出2



function A()
function A()
{
    _a = "";
    this.getA = function(){return _a;};
    this.setA = function(a){_a = a;};
}
var a1 = new A();
var a2 = new A();
a1.setA("1");
a2.setA("2");
alert(a1.getA()); // 输出2
alert(a2.getA()); // 输出2


作为一名js的小白,可能对js的基础知识不太了解,对于以上的3段代码.
本来我是想写一个类A,这个类有一个私有属性_a,然后这个类有一个set方法和get方法.因为得知如果用原型定义类方法可以避免在创建对象的时候重复创建方法,但是却有以下的问题.

1.如果类中定义了var _a="",使用prototype定义get和set方法,在创建的多个对象中,使用的_a同一个引用.
2.同样定义var _a="",使用this定义get和set方法,在创建的多个对象中,使用的_a却不是同一个引用.
3.如果没使用var _a = ""来定义_a,直接用_a="",使用this定义get和set方法,在创建的多个对象中,使用的_a同一个引用.
4.当然使用this._a = ""来定义_a,使用prototype定义get和set方法是没有问题的,但我希望_a是私有属性.

希望有大大能给我解惑,这是js的闭包基础知识吗?谢谢.

------解决方案--------------------
1,A.prototype.getA=function(){return _a;};A.prototype.getA是维一的以最后一次为准
 所以取是最后一个
2,这个是this.getA=function(){}是独立的,所以取到自己域内的值
3,_a = "",没有var 是个全局的变量,所以两个的值都一样

第2方法也算是实现a私有化,的可以看做私有 属性