首頁  >  問答  >  主體

JavaScript建立物件的方法

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

高洛峰高洛峰2686 天前758

全部回覆(2)我來回復

  • PHP中文网

    PHP中文网2017-06-12 09:31:35

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

    第二個問題:
    當我們創建一個建構函數,其內部就有一個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();

    回覆
    0
  • 女神的闺蜜爱上我

    女神的闺蜜爱上我2017-06-12 09:31:35

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

    回覆
    0
  • 取消回覆