JavaScript之prototype斷鏈理解

來源:互聯網
上載者:User

最近在論壇看到一篇文章關於prototype斷鏈的,原文如下

var sound = {echo: function() { alert("sound"); } };function Person() {this.name="name_";};Person.prototype = sound;//----早點綁上去----var fo1o = new Person(); var xxxxxx=Person.prototype;//----遲了綁上去----??xxxxxx.yyyy="yyyy_"; alert(fo1o.echo);//alert(undefined);alert(fo1o.yyyy);//alert(undefined);////////////////////////////////////////////////////////////////////////////////////////////////////var sound = {echo: function() { alert("sound"); } };function Person() {this.name="name_";};var fo1o = new Person(); Person.prototype = sound;//----遲了綁上去----var xxxxxx=Person.prototype;//----遲了綁上去----??xxxxxx.yyyy="yyyy_"; alert(fo1o.echo);//alert(function(){....});alert(fo1o.yyyy);//alert("yyyy_");//為什麼alert(fo1o.yyyy)會受到影響。

這裡的alert注釋寫反了,不過這不是重點,重點是為什麼第二次alert的東西是undefined?而且後來我做了實驗,測試如下內容:

1.alert(fo1o.name);//name_

2.Person.prototype.name='_name';alert(fo1o.name);//name_

3.Person.prototype.name='_name';var fo2o=new Person();alert(fo2o.name);//name_

以上三個實驗主要是測試prototype能否修改對象原有屬性,結果是不能的,因為其實每個對象儲存的東西除了固有(即聲明時帶著)的屬性和方法外,還有一個prototype對象,而prototype主要是用來擴充原有對象的功能,就是說,如果訪問一個對象的屬性時,先在固有屬性裡找,如果找不到,就再去prototype對象中的屬性中找。具體請看下面兩個圖:


第一個圖聲明了一個類Person,該類有一個固有屬性name和一個prototype屬性age,然後聲明一個Person的對象a,然後它的name屬性從Person類中cZ喎?http://www.bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcHnBy9K7t92jrLWrysdwcm90b3R5cGXWuM/ytcTE2rTmu7nKx9K70fmjrNXiwO+/ydLUsNFwcm90b3R5cGW/tNf20ru49ta41euho8v50tTL+dPQUGVyc29uttTP87a8v8nS1Lmyz+1wcm90b3R5cGW1xMr00NS6zbe9t6ijqNa70qpQZXJzb261xHByb3RvdHlwZda4z/K1xM671sPDu7Hko6mjrLWrysfWu9KqUGVyc29utcRwcm90b3R5cGXW2NDCuLMmIzIwNTQwO6Os1rjP8sHLwe3N4tK7xqzE2rTmo6zS1LrzyfnD97XEUGVyc29uttTP877NsrvE3LrN0tTHsFBlcnNvbrbUz/O5ss/txNq05sHLo6zL/MPHtcTBqs+1vs274cfQts+jrGHKx7fDzsqyu7W9c2V4yvTQ1LXEoaM8L3A+CjxwPrTLzeKjrM7Syc/D5tf2tcTI/bj2yrXR6crHzqrBy9Hp1qRwcm90b3R5cGXK9NDUxNy38biyuMfA4LnM09DK9NDUo6y08LC4z9TIu7K7xNyjrMv8w8e1xMTatObOu9bDtryyu9K70fmho8THztK+zdPQ0ru49s7KzOLBy6OsyOe5+3Byb3RvdHlwZcDvyfnD98HL0ru49rrNuczT0Mr00NTP4M2sw/vX1rXEyvTQ1KOswP3I51BlcnNvbi5wcm90b3R5cGUubmFtZT0="hello,world',那麼如何通過Person對象來訪問prototype的name屬性呢?

我的理解就到此結束,上面所述如有不對,請各位大神不吝指正,謝謝。

聯繫我們

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