Javascript建立物件的方法有物件字面量、new 建構子、Object.create()等,Object.create()方法是否是最能體現Javascript基於原型的想法? new 建構函式創建物件又是如何體現基於原型的想法的?物件字面量方法和new 建構子兩種方法誰更早出現的?
拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
抱歉第一個問題我不太了解,等我研究研究再來補充。
第二個問題:當我們創建一個建構函數,其內部就有一個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();
var obj = {};
var obj = new Object();
第一個問題:MDN上有關於Object.create()的解釋,可以看一下https://developer.mozilla.org...(英文有困難可以切換中文瀏覽)第二個問題: new 是個JS 的關鍵字,這個語言底層機制可以猜測,但是就不敢說就是怎麼樣子的,它是怎麼體現基於原型?這個問題有點怪異,我覺得JS物件的基於原型不是new 體現出來的,而是這門語言的物件的原型鏈機制決定的,然後體顯現出來的現象就是向上搜尋機制(上面那位所說的搜尋機制)第三個問題:當使用字面量創建對象時其實是首先創建了一個空對象{};讓空對象的__proto__指向Object.prototype;將this綁定到這個空物件上面;將建立的物件中的屬性與方法綁定到this上面;最後回傳這個物件;基本上就是這個樣子吧,如果錯誤請指出來,謝謝! (好讓我的錯誤不會去誤人子弟).
抱歉第一個問題我不太了解,等我研究研究再來補充。
第二個問題:
當我們創建一個建構函數,其內部就有一個Prototype屬性,該屬性是一個指針,指向了該構造函數的原型對象
透過new操作符+構造函數實例化出來的對象,內部有一個__proto__屬性,該屬性也指向了原型對象
我覺得能體現出來的應該是指透過原型鏈搜尋變數的機制吧
當搜尋一個變數時,會在實例屬性中查找,找不到才會去原型物件中(物件的__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上面;
最後回傳這個物件;
基本上就是這個樣子吧,如果錯誤請指出來,謝謝! (好讓我的錯誤不會去誤人子弟).