首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

[讨论]prototype的成员叠加。该如何解决

2012-02-14 
[讨论]prototype的成员叠加。。。。。scripttype text/javascript Function.prototype.toStringfunction(

[讨论]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这个东西还不是很懂,先踩一脚.
[解决办法]
踩一脚
------解决方案--------------------


wc_2.prototype = new wc_1;
就是js实现继承的一种方法.
[解决办法]
这两天看了看,觉得prototype是js中用来实现继承的一中方法,prototype一般指的就是该对象的父对象。
[解决办法]
都是星级人物..漂走......
[解决办法]
LZ是不是被前几天那个toString是哪的方法勾起兴趣了

的确混淆了
现在就把prototype当做对象的一个静态属性或方法
这样想又有点BT...还是当指针得了..
[解决办法]
要说继承也确实有点牵强,所有的function都有prototype,而其中的prototype只有一个属性:constructor.最初的设计觉得可能是为了保留为构造器的引用,并切可以对其进行扩展(这个只是猜测).
[解决办法]
这个应该是因为prototype是一个Object,就具有Object的所有方法。要想了解更清楚点,看来只能再努力看文档了。

热点排行