今天閑來無聊,回顧知識點(diǎn),記憶告訴自己,prototype 是能動態(tài)給js的對象添加屬性和函數(shù)的。
寫了一個(gè)小例子。居然沒調(diào)通。我老郁悶啦。
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());
心想應(yīng)該分別輸出 “b” 和 “c”
結(jié)果兩次輸出都是“b”。仔細(xì)看著這簡單的腳本似乎沒有任何錯(cuò)誤,看久了我想起一句話,prototype 是動態(tài)追加。 于是我在想,動態(tài)追加,是否應(yīng)該該成這樣呢。
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());
這次修改后,輸出的結(jié)果和自己想的是一致的,以至于不再否認(rèn)人生了。。。(夸張了點(diǎn)

)
總結(jié)如下。
1.在類的基礎(chǔ)或者說原生已有的情況下,prototype是不能覆蓋的,他的功能是追加,擴(kuò)展。(當(dāng)然自然讓我們想到繼承,不錯(cuò),這個(gè)思路是對的。)
2.如果同時(shí)動態(tài)增加的屬性或者方法,prototype是能覆蓋掉的。(我不能空口下結(jié)論,給個(gè)小腳本如下。)
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 閱讀(2930)
評論(0) 編輯 收藏 所屬分類:
web前端