今天闲来无聊,回顾知识点,记忆告诉自己,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());
这次修改后,输出的结果和自己想的是一致的,以至于不再否认人生了。。。(夸张了点
)
总结如下。
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());
posted on 2010-03-17 21:58
-274°C 阅读(2924)
评论(0) 编辑 收藏 所属分类:
web前端