關於Javascript 的 prototype問題。

來源:互聯網
上載者:User

prototype

1、
prototype是與Clone聯絡起來的,
也就是說,當建立執行個體時,prototype會把成員clone到該Class(function)的執行個體上。
Detail: 最常見的幾個內建內對象裡的prototype,如:Array原型有join, split方法,
當建立數組a時var a=[1,2],原型裡的所有方法都被clone到a上。

2、this是該類的執行個體指標(該指標為"動態聯編")。如何理解js this的動態聯編,請參考我寫的這篇文章:http://blog.never-online.net/article.asp?id=117
當建立該類執行個體時,執行個體具有預先定義的所有以this.p類似的成員。也具有prototype原型裡定義的成員,如果類內部定義與prototype裡的一個定義相同,則不是重寫:

看這個例子,jsclass定義的this.func,還有prototype裡定義的func,如果jsclass內部有成員與原型裡的相同,執行個體化時優先權為this.func,但注意,原型裡並不是重寫func,而是jsclass執行個體共有的,雖然其優先權沒有this.func高,與此同時,我們也可以以這種方式來理解prototype與類內部定義成員:

<script>
function jsclass() {
this.p = "never-online";
this.func = function () {
alert('func');
}
}
jsclass.prototype = {
func : function () {
alert(this.p);
}
}
var a = new jsclass();
a.func();
delete a.func;
a.func();
</script>

我們再把上面的代碼修改一下。這樣看:
<script>
function jsclass() {
this.p = "never-online";
this.func = function () {
alert('func');
}
}
jsclass.prototype = {
func : function () {
alert(this.p?this.p:'no value');
}
}
var a = new jsclass();
a.func();//調用內部成員
delete a.func;//此處刪除是的類內部定義的func
a.func();//調用prototype成員
delete a.func;//試圖再次刪除func(prototype)
a.func();//刪除無效(內部的func已經被刪除),依然可列印輸出
</script>

注釋:類內部的成員可以用delete刪除,而原型裡定義的,則不能用delete 執行個體名.成員名來刪除的。
如果用prototype定義後,執行個體化時:用原型執行個體指定建立對象的種類,並且通過拷貝這些原型建立新的對象
也就是在上面的
delete a.func;//此處刪除是的類內部定義的func
a.func();//調用prototype成員
之後,再次調用a.func(),調用時,通過調用prototype.func來實現的。而並非a.func(),這也解釋了為什麼在jsclass內部定義func與在prototype定義func時不會有重寫現象。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.