JavaScript建立物件的方法
高洛峰
高洛峰 2017-06-12 09:29:35
0
2
707

Javascript建立物件的方法有物件字面量、new 建構子、Object.create()等,Object.create()方法是否是最能體現Javascript基於原型的想法? new 建構函式創建物件又是如何體現基於原型的想法的?物件字面量方法和new 建構子兩種方法誰更早出現的?

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回覆 (2)
Ty80

抱歉第一個問題我不太了解,等我研究研究再來補充。

第二個問題:
當我們創建一個建構函數,其內部就有一個Prototype屬性,該屬性是一個指針,指向了該構造函數的原型對象
透過new操作符+構造函數實例化出來的對象,內部有一個__proto__屬性,該屬性也指向了原型對象

function Foo(name){ this.name = name; } Foo.prototype.getName = function(){ return this.name; }; var obj = new Foo("suoz"); alert(obj.getName());

我覺得能體現出來的應該是指透過原型鏈搜尋變數的機制

當搜尋一個變數時,會在實例屬性中查找,找不到才會去原型物件中(物件的__proto__指向的物件)查找,一直到Object.prototype(因為在JavaScript中每一個函數都是物件),找到則返回,找不到則返回undefined

第三個問題:
肯定是new+建構子最早出現,因為物件字面量是後來開發人員為了簡化操作而推出的。再者其實執行了var obj = {};,其實系統內部真實的執行程式碼是這樣的var obj = new Object();

    女神的闺蜜爱上我

    第一個問題:
    MDN上有關於Object.create()的解釋,可以看一下
    https://developer.mozilla.org...(英文有困難可以切換中文瀏覽)
    第二個問題:
    new 是個JS 的關鍵字,這個語言底層機制可以猜測,但是就不敢說就是怎麼樣子的,它是怎麼體現基於原型?這個問題有點怪異,我覺得JS物件的基於原型不是new 體現出來的,而是這門語言的物件的原型鏈機制決定的,然後體顯現出來的現象就是向上搜尋機制(上面那位所說的搜尋機制)
    第三個問題:
    當使用字面量創建對象時其實是
    首先創建了一個空對象{};
    讓空對象的__proto__指向Object.prototype;
    將this綁定到這個空物件上面;
    將建立的物件中的屬性與方法綁定到this上面;
    最後回傳這個物件;
    基本上就是這個樣子吧,如果錯誤請指出來,謝謝! (好讓我的錯誤不會去誤人子弟).

      最新下載
      更多>
      網站特效
      網站源碼
      網站素材
      前端模板
      關於我們 免責聲明 Sitemap
      PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!