JavaScript中的原型繼承

來源:互聯網
上載者:User

下面的理解是錯的,只是個筆記。代表我曾經的思考。

學習JavaScript時需要將prototype和__proto__分清,Quora中有一篇解釋挺好。

_________________________________________________________________________________________

 

對於原型繼承我現在仍舊比較模糊,但我感覺這完全不是以前子類,父類似的繼承。他們有著完全不同的東西。

 

原型是一個object,JavaScript中沒有類型的概念。 JavaScript中所有的東西除了基本類型,就是object。一個object的原型也是一個object。我們看代碼:

 

function Person(){};function Worker(){};var w = new Worker(); w.prototype=new Person();   //w(一個object)的原型也是一個objectw.prototype.say = function{alert("hi")}; 

 

這裡的say方法只添加到當前的對象(object)w中(直的嗎?這個說法其實是模糊的),並不影響Worker()這個函數。 所以當

var w2=new Worker(); 

並不會有say函數的實現。即w與w2是兩個獨立的object.

如果說w與w2區別就是w對象多了一個say函數?如果這麼說的話那w.prototype.say=function{};與w.say=function區別是什麼呢?

 

我能想到的區別就是w.say是給當前object加一個屬性,而w.prototype.say是給w的原形對象(即通過new Person()建立的一個object)加一個屬性。

 

我們來看一段代碼:

var w1 = new Worker();    //implicit prototype link w1.prototype = new Person();     //explict prototype propertyw1.prototype.say = function(){alert('hi')};var w2 = new Worker();w2.prototype = new Person();w2.say = function(){alert('hi')};var w3 = new Worker();   //implict prototype link to WorkerWorker.prototype.say = function(){};  //Worker prototype adding say can be access by w1.w3Person.prototype.say = function(){};  //explicit prototype, can't be access by w1.w3

到目前為止我還是不理解,為什麼w1.say是undefined, w3.say確是function。

 

我想用圖來解釋上面一段代碼,注意中都是對象(object),沒有類,即使函數也是對象(想想JavaScript中內建Function對象):

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.