寫了一個小例子。居然沒調通。我老郁悶啦。
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());
{
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());
{
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());
{
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());