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

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上面;
最後回傳這個物件;
基本上就是這個樣子吧,如果錯誤請指出來,謝謝! (好讓我的錯誤不會去誤人子弟).

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板