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

一则关于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?
=