关于prototype使用位置问题的讨论
生活随笔
收集整理的這篇文章主要介紹了
关于prototype使用位置问题的讨论
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
問題貼:http://bbs.csdn.net/topics/390446362
new四部曲:
(1)創(chuàng)建一個新的對象,并讓函數(shù)的 this?指針指向它;
(2)將函數(shù)的?prototype?對象的所有成員都賦給這個新對象,特別地:對象的__proto__ = 函數(shù)的prototype;
(3)執(zhí)行函數(shù)體,對這個對象進行初始化操作;
(4)返回(1)中創(chuàng)建的對象
注意定義函數(shù)的時候這個函數(shù)是不會被執(zhí)行的(個人比較容易搞錯),在new時,先執(zhí)行相關(guān)賦值,然后再執(zhí)行構(gòu)造函數(shù)。所以會出現(xiàn)第一次new后得到的對象沒有繼承指定的prototype的方法和屬性(因為prototype還未重新賦值),第二次new就可以??创a:
function View(){} View.prototype.a = function{alert("我是View的父類函數(shù)");} function switcher() {switcher.prototype = View.prototype; } s = new switcher(); alert(s.a); s = new switcher(); alert(s.a);
輸出
那么要實現(xiàn)繼承,解決辦法是什么呢
方案一:
function View(){} View.prototype.a = function{alert("我是View的父類函數(shù)");} function switcher() { } switcher.prototype = View.prototype; // 外部執(zhí)行 s = new switcher(); alert(s.a); s = new switcher(); alert(s.a);
輸出:
方案二:
function switcher() {this.__proto__ = View.prototype; } s = new switcher(); alert(s.a); s = new switcher(); alert(s.a);輸出:
雖然兩種方案效果一樣,但是后者可以將語句放在函數(shù)內(nèi),這樣更好,便于繼承以及代碼的耦合。
總結(jié)
以上是生活随笔為你收集整理的关于prototype使用位置问题的讨论的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 18倍增长 京东618数字人民币消费金额
- 下一篇: 电脑休眠和睡眠的区别_关机、睡眠、休眠的