js解释执行的...function ClassB(){}
var obj2 = new ClassB(); //此时还没有attr2属性
ClassB.prototype = {attr2 : '2'}; //这时attr2属性才产生
alert(obj2.attr2);
var obj2 = new ClassB(); //此时还没有attr2属性
ClassB.prototype = {attr2 : '2'}; //这时attr2属性才产生
alert(obj2.attr2);
function ClassC(){}
var obj3 = new ClassC();
ClassC.prototype.attr2 = '2';
alert(obj3.attr2);
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'};
只能被使用一次
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的认识又深入了一步,楼主问得不错,哈哈~~!
每个对象都拥有自己的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 -------变成了这样的结构..
我感觉我表达的挺清楚了...