JavaScript對象系統深入剖析3-建立對象Object.Create

來源:互聯網
上載者:User

3.建立對象Object.Create 

 

@吳穹Adam

 

看這兩天同學們的反饋還是覺得比較難懂,因此,決定再舉一個例子協助大家理解吧,後面有關Scope和閉包Closure的精彩內容就只好晚一點寫了!

 

其實,這個系列不是寫給初學者的,而是寫給那些中級JS程式員的,對JS有一定的認識,希望這個系列能夠協助他們透過現象看到本質。同時,這裡面的內容是高度濃縮的,向1,2節基本上對應了JavaScript: The Good Parts兩章的內容,因此,建議感興趣的同學,最好根據上面的例子程式,配合Debugger,仔細體會可能才能理解,指望光看這個部落格系列就完全搞懂JS的對象系統是不太切合實際的。

 

另外,如果你只是簡單寫寫網頁,的確可能不需要把JS搞懂這麼清楚,但是如果你真正重視JS,打算應用例如node.js,backbone.js這樣的JS架構的話,那麼,我認為還是需要真正把JS搞明白的。

 

同時,在閱讀下面內容之前,請先閱讀1,2:

1. 對象 http://blog.csdn.net/adwu73/article/details/7219044

2.函數對象 http://blog.csdn.net/adwu73/article/details/7219887

 

好,切入正題吧,在JavaScript: The Good Parts當中,給出了一個建立對象的常用方式:

Object.create = function (o) {

         var F = function () {};

         F.prototype = o;

         return new F();

     };

var b=Object.create(a);

        

結合1,2節的內容,我們來理解一下上述這段代碼:

 

首先,在執行var b=Object.create(a);之前,已經有了a對象,如:

 

在執行了var F = function () {};之後,F函數對象被建立出來,他的property屬性也被賦值指向一個新建立出來的對象,詳細規則在第二節描述過:

當用var ff = function(){}定義一個函數時,JS會產生一個函數對象F,函數對象F的__proto__指標指向Function.prototype(在中省略了), 同時F還會有一個property屬性,property屬性的值指向一個新建立的對象P,這個對象P只有一個屬性是建構函式constructor(),建構函式constructor()的值就是函數對象F,而對象P的__proto__指標則指向Object.Prototype,

 

 

執行了F.prototype = o; 之後, F的prototype屬性指向了對象A,如所示:

 

執行new F();之後,根據第2節中描述的規則,執行之後的對象關係如下:

當用new啟用一個函數時,一個新對象會被建立出來,其內容是執行函數的返回結果,而這個對象的__proto__連結指向函數的prototype屬性所引用的對象

 

函數Object.create返回之後,F和p都不存在了,因此,最後的對象關係如下:

 

總結一下,我們可以看到,對象的__proto__連結是不能直接修改的,而函數對象的prototype屬性是可以修改的,因此,Object.create實際上是利用了這個特點,結合new來完成了一個拷貝建立的過程,希望這個例子能夠協助大家更好地理解!!

 

可繼續閱讀 4. Scope和Object http://blog.csdn.net/adwu73/article/details/7229564

 

補記:推薦大家去看一下這個部落格,解釋的會更詳細,有更多例子: http://www.cnblogs.com/TomXu/archive/2011/12/15/2288411.html

 

相關文章

聯繫我們

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