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

[讨论]prototype的成员叠加。。。。。
<script   type= "text/javascript ">
Function.prototype.toString   =   function   ()   {
return   '咱家FUNCTION ';
};
Object.prototype.toString   =   function   ()   {
return   '咱家OBJECT '
};

alert({});   //   Object.prototype.toString
alert(function   ()   {});   //   Function.prototype.toString
alert(Object);   //   Function.prototype.toString   ;这里不要混淆,Object是函数对象的说。。。

delete   Function.prototype.toString;   //去掉函数的toString方法
alert( "kill   Function.prototype.toString ");

alert({});   //   Object.prototype.toString   //没影响Object.prototype.toString所以原值
alert(function   ()   {});   /*
Function.prototype.toString   被kill了,所以返回的是Object.prototype.toString
因为函数是对象的一种,可以理解成对象的子类所以它自然继承Object.prototype.toString
下面会有单独的CODE来表现这种形式
*/
alert(Object);   //   同理

alert( "kill   Object.prototype.toString ");
delete   Object.prototype.toString;   //去掉对象的toString方法

alert({});   /*
Object.prototype.toString被kill了所以自然就调用了系统默认的toString方法即window之类的所有的东西的toString方法
可以理解成Object的实例继承了默认的系统toString,然后又继承了Object.prototype.toString
然而函数则继承了3层的toString
即顺序是:
系统的toString
Object的toString
Function的toString
*/
alert(function   ()   {});   //   同理
alert(Object);   //   同理


/***************类表示层叠方法的形式****************/
alert( "类表示层叠方法的形式 ");


var   wc_1   =   new   Function();
wc_1.prototype   =   {
value   :   "wc_1 "
};

var   wc_2   =   new   Function();
wc_2.prototype   =   new   wc_1;
wc_2.prototype.value   =   "wc_2 ";

var   wc_3   =   new   Function();
wc_3.prototype   =   new   wc_2;
wc_3.prototype.value   =   "wc_3 ";

/*
注意:我理解的话这里原型实例化后它的所有成员指向的内容为只读,所以如果你修改的话,
就会新加一个成员指向新的方法这样的图

原型成员   ---------------     xxx   只读
                                                      |
                                                      |
实例成员   -------------------
实例成员   ---------------     yyy   读/写

然后调用的在修改的话,发现那个可以写了,所以就不用在创建新的成员了。。。直接修改后面那个属性。
然后所有的访问都是操作后面的。。
测试了若干次。。目前我是这么理解。。。欢迎大家继续讨论
*/

var   wc   =   new   wc_3,   i;
alert(wc.value   ===   wc_3.prototype.value);
delete   wc.value;
alert(wc.value);
delete   wc_3.prototype.value;
alert(wc.value);
delete   wc_2.prototype.value;
alert(wc.value);
</script>

------解决方案--------------------
路过....
------解决方案--------------------
踩上一脚,下班回家.
wc同学多多补充营养,别太伤脑筋了哈.
------解决方案--------------------
prototype这个东西还不是很懂,先踩一脚.
------解决方案--------------------
踩一脚
------解决方案--------------------