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

一则关于javascript prototype 异常用例

2012-11-25 
一则关于javascript prototype 错误用例今天闲来无聊,回顾知识点,记忆告诉自己,prototype 是能动态给js的

一则关于javascript prototype 错误用例
今天闲来无聊,回顾知识点,记忆告诉自己,prototype 是能动态给js的对象添加属性和函数的。

写了一个小例子。居然没调通。我老郁闷啦。

eg:
function?MyObject(t)
????????  ?{
????????  ?????this.name?=?t;
????????  ?}
????????  ?
???????? ??MyObject.prototype.writeName?=?function()
????????  ?{
????????????????return?this.name;
????????  ?}
????????  ?
????????  ?var?myobj1?=?new?MyObject("b");
????????
????????  ?alert(myobj1.writeName());
????????  ?
????????  ?MyObject.prototype.name?=?"c";
????????  ?
????????  ?alert(myobj1.writeName());
心想应该分别输出 “b” 和 “c”

结果两次输出都是“b”。仔细看着这简单的脚本似乎没有任何错误,看久了我想起一句话,prototype 是动态追加。 于是我在想,动态追加,是否应该该成这样呢。
function?MyObject(t)
????????  ?{
????????  ?????this.size?=?t;
????????  ?}
????????  ?
???????? ??MyObject.prototype.writeName?=?function()
????????  ?{
????????????????return?this.name;
????????  ?}
????????
????????  ?MyObject.prototype.name?=?"b";
????????
????????  ?var?myobj1?=?new?MyObject("b");
????????
????????  ?alert(myobj1.writeName());
????????  ?
????????  ?MyObject.prototype.name?=?"c";
????????  ?
????????  ?alert(myobj1.writeName());
?这次修改后,输出的结果和自己想的是一致的,以至于不再否认人生了。。。(夸张了点一则关于javascript prototype 异常用例

总结如下。

1.在类的基础或者说原生已有的情况下,prototype是不能覆盖的,他的功能是追加,扩展。(当然自然让我们想到继承,不错,这个思路是对的。)

2.如果同时动态增加的属性或者方法,prototype是能覆盖掉的。(我不能空口下结论,给个小脚本如下。)
function?MyObject(t)
????????  ?{
????????  ?????this.size?=?t;
????????  ?}
????????  ?
???????? ??MyObject.prototype.writeName?=?function()
????????  ?{
????????????????return?this.name;
????????  ?}
????????
????????  ?MyObject.prototype.name?=?"b";
????????
????????  ?var?myobj1?=?new?MyObject("b");
????????
????????  ?alert(myobj1.writeName());
????????  ?
????????  ?MyObject.prototype.name?=?"c";
????????  ?
????????  ?alert(myobj1.writeName());
????????
????????????MyObject.prototype.name?=?"d";
????????
???????? ?alert(myobj1.writeName());





热点排行