原型(prototype)上的成员是共享的,
对象成员a1访问过程是:
查看对象自身有无a1,若有,则访问该成员,
若无,则访问原型上a1成员,若仍然无,则访问原型的原型(即原型链机制)

解决方案 »

  1.   

    但是a1自身给data赋值后,会导致新new出来的a2的data和a1的data相同,且属性b不受影响,即AAA=function(){}
    AAA.prototype.data={};
    AAA.prototype.b="b1";var a1=new AAA()
    a1.data.a1="1";
    a1.data.a2="2";
    a1.b="bb1";
    console.log(a1.data)//{a1:1,a2:2}
    console.log(a1.b)//bb1var a2=new AAA(); 
    console.log(a2.data)//{a1:1,a2:2}
    console.log(a2.b)//b1
      

  2.   

    Javascript规定,每一个构造函数都有一个prototype属性,指向另一个对象。这个对象的所有属性和方法,都会被构造函数  的实例继承。
    a1和a2的data属性,实际都是指向同一个对象。AAA的prototype里的属性和方法被AAA的所有实例共享。
      

  3.   

    AAA=function(){}
    AAA.prototype.data={};
    AAA.prototype.b="b1";
     
    var a1=new AAA()
    a1.data.a1="1";
    a1.data.a2="2";
    a1.b="bb1";
    console.log(a1.data)//{a1:1,a2:2}
    console.log(a1.b)//bb1
     
    var a2=new AAA(); 
    console.log(a2.data)//{a1:1,a2:2}
    console.log(a2.b)//b1那为何属性b不受影响
      

  4.   

    原型对象(prototype)中的属性是所有实例对象公有的公共属性由于JavaScript中继承只发生在“获取”属性的值时,对于属性的值是String,Number和Boolean这些数据本身不能被修改的类型时没有什么影响。但是Array和Object类型就会有问题: