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