js解释执行的...function ClassB(){}
var obj2 = new ClassB(); //此时还没有attr2属性
ClassB.prototype = {attr2 : '2'}; //这时attr2属性才产生
alert(obj2.attr2);

解决方案 »

  1.   

    ismycxp那这里怎么解释
    function ClassC(){}
    var obj3 = new ClassC();
    ClassC.prototype.attr2 = '2';
    alert(obj3.attr2);
      

  2.   

    function ClassA(){}
    ClassA.prototype = {attr2 : '2'};
    var obj = new ClassA();
    alert("obj="+obj.attr2);function ClassC(){}
    var obj3 = new ClassC();
    ClassC.prototype.attr2 = '2';
    alert("obj3="+obj3.attr2);function ClassB(){}
    var obj2 = new ClassB();
    ClassB.prototype.attr2='2';
    alert("obj2="+obj2.attr2);稍微修改一下,这样子就可以了反过来,这样子function ClassA(){}
    ClassA.prototype = {attr2 : '2'};
    var obj = new ClassA();
    alert("obj="+obj.attr2);function ClassC(){}
    var obj3 = new ClassC();
    ClassC.prototype = {attr2 : '2'};
    alert("obj3="+obj3.attr2);function ClassB(){}
    var obj2 = new ClassB();
    ClassB.prototype.attr2='2';
    alert("obj2="+obj2.attr2);obj3.attr2也是undefined
    这就说明此种赋值方式
    ClassX.prototype = {attr2 : '2'};
    只能被使用一次
      

  3.   

    经验和结果告诉我:对象在new的时候做了一件事:将其类的prototype对象的引用也复制了一份(为方便说明,命名为p1)并将对象与p1关联起来,但这种关系是由JS引擎维护的,即我们不能更改p1这个引用的值,那p1就会永远指向生成对象时的类的prototype对象,同时以后当类的prototype改变的时候,p1的值也不会同步更新。事实证据如下:function Cls(){}
    Cls.prototype = {a : function(){alert('1')}};
    var o1 = new Cls();
    Cls.prototype = {a : function(){alert('2')}};
    var o2 = new Cls();
    Cls.prototype = {a : function(){alert('3')}};
    var o3 = new Cls();
    o1.a();                // 1
    o2.a();                // 2
    o3.a();                // 3
    Cls.prototype.a = function(){alert('4')};
    o1.a();                // 1
    o2.a();                // 2
    o3.a();                // 4//o3之所以两次不同,是因为生成o3时的prototype对象并没有被覆盖,它的"p1"(该名来源见上面)正是Cls的prototype=============================
    对prototype的认识又深入了一步,楼主问得不错,哈哈~~!
      

  4.   

    prototype的结构是这样的(我感觉)
    每个对象都拥有自己的prototype但是prototype的属性确是唯一的.即...o1 = new Function();
    o1.prototype = {
        name : "wc",
        age : 18
    };
    o2 = new o1;o1.prototype.age = "19";o2 = new o1;o1.prototype = {name:"wc"};基本结构如下..
    o1 --- prototype -------
                           |
    o2 --- prototype ------|---------{name 属性, age属性..};
                           |
    o3 --- prototype -------
    o1.prototype.age = "19";
    这句话通过引用的对象修改了age属性..
    所以输出的结果发生了变化..
    但是
    o1.prototype = {name:"wc"};
    这句话确修改了prototype的引用对象..
    就是说...o1 --- prototype ----------------{name:"wc"};o2 --- prototype ------|---------{name:"wc", age:19};
                           |
    o3 --- prototype -------变成了这样的结构..
    我感觉我表达的挺清楚了...