今天閑來無聊,回顧知識點,記憶告訴自己,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 閱讀(2930)
評論(0) 編輯 收藏 所屬分類:
web前端