我有个问题想请教下:
我现在进行面向对象设计时有个疑惑,我们定义一个类:
function A(){
}
此时我想给A增加属性:
1. function A(){
A.prop = xxx
}
2. A.prototype.prop = xxx
我不知道这两种方式孰优孰劣,在什么情况下使用哪种方式为佳?然后我想定义一个get的方法,用于返回A中的私有属性
A的私有属性有两种定义方式:
1. function A(){
this._private = xxx => 开发人员协定加“_”的为私有属性,实质上是公共属性
}
2. function A(){
var _private = xxx => 完全私有属性
}
此时定义get方法,针对第一种情况为
A.prototype.getPrivateProp = function(){return this._private;}
针对第二种情况为
function A(){
var _private = xxx => 完全私有属性
this.getPrivateProp = function() {return _private;}
}
那边以上两种处理方式孰优孰劣,什么情况下使用哪种方式合适呢?还有就是我把公共方法定义在A类里和定义在A的prototype上有什么区别吗?

解决方案 »

  1.   

    问题2,都可以,情况2是闭包,在不方便使用this指针的时候多用这种方式。
      

  2.   

    你的意思是说如果我采用A.prototype.prop = 1的方式定义属性,那么var obj1 = new A();
    var obj2 = new A();
    obj1.prop = 2;
    alert(obj2.prop);  //弹出2对吗?
      

  3.   

    包括上面说了几点,我再举个例子。
    100个人的团队,用prototype好处你就看到了。不用写一个方法就要写一次这个对象吧。最后怎么整合是不?
      

  4.   

    定义在protetype里, 数据和形为都是公用的。对原型的改变,同时会影响到类的实例上
    直接在构造函数中定义就不会出现这种情况
    虽然说把方法和字段写在构造函数中可以真正的实现private ,而在原型中只能加个“_”来说明
    但javascript本就是弱类型语言,没有那些静态语言这么强的约束力和易读性,所以是不是真正实现private也无所谓,明白他是私有的就行了。什么样的用法好完全看自己的习惯