我瞭解JavaScript原型通過__proto__
屬性繼承。但是我注意到,當我做var f = function() {}
f現在除__proto__
屬性之外還有prototype
屬性。看起來prototype
不參與財產鏈。 究竟是呢?JS函數的prototype屬性用於什麼?
回答
它被賦值爲使用該函數通過關鍵字new
創建的對象的原型。
因此,例如:
function Foo() {
}
Foo.prototype.bar = 47;
var obj = new Foo();
alert(obj.bar); // alerts 47, via `obj`'s prototype
obj
並分配給Foo.prototype
對象之間的引用是一個人住一間,所以進一步增加了東西Foo.prototype
會使他們出現在obj
的原型:
Foo.prototype.charlie = 62;
alert(obj.charlie); // alerts 62
當然,如果你更換Foo.prototype
(我勸阻),那麼你就指着Foo.prototype
在不同的對象。 obj
仍將參考老一:
Foo.prototype = {delta: 77}; // Not recommended
alert(obj.delta); // alerts "undefined"
關於__proto__
:__proto__
是非標準。此前ECMAScript5(這是短短一年半了),有直接與對象的原型進行交互沒有標準的方法,你只能在創建對象的時候通過一個構造函數的prototype
屬性分配他們的,只有間接的影響。 __proto__
是一些JavaScript引擎的專有擴展(最着名的是Mozilla的SpiderMonkey,Firefox中的引擎)。它沒有任何標準,根據ECMAScript委員會,它不會。 (相反,ECMAScript5提供函數用於與對象的原型進行交互。)__proto__
is now deprecated由Mozilla提供。
的_proto_
屬性是對象的實例的屬性(該對象的存在,在這種情況下,一個功能),它是指該實例的原型。你應該注意到,這個屬性是非標準和折舊,使用Object.getPrototypeOf(ref)
代替:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/Proto
prototype
,相反,是一個函數的聲明(不是實例)的屬性,並且是原型函數的所有實例。退房的文檔:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/prototype
當你創建一個函數(使用new
關鍵字)的新實例,函數對象被創建,由prototype
定義。在實例化後(var myNewObject = new Foo()
),對Object.getPrototypeOf(myNewObject)
的調用將返回對實例所基於的原型的引用。
總結一下:__proto__
是什麼東西,prototype
是什麼東西可以(或可能已經是)。
*「'_proto_'屬性是一個函數實例的屬性。* * *對象*的實例(可能已經或可能不是由函數創建的)。 – 2011-06-06 18:29:34
夠公平的,它仍然是非標準的:) – 2011-06-06 18:35:46
是的。不推薦使用,不要少於。 ;-) – 2011-06-06 21:23:41
- 1. Javascript - 在構造函數或構造函數的prototype屬性中設置屬性?
- 2. 爲什麼jQuery使用插件的prototype屬性?
- 3. javascript中的prototype屬性有什麼用處?
- 4. .link()函數屬於哪裏,屬性數據是什麼
- 5. JavaScript:什麼是.extend和.prototype用於?
- 6. jQuery函數JS innerHTML屬性
- 7. Prototype對JavaScript的innerHTML屬性的等效方法是什麼?
- 8. 對象實例爲Prototype的屬性輸出`undefined`。爲什麼?
- 9. 是否可以更改JavaScript函數的`prototype`屬性的名稱?
- 10. 什麼是`constructor`屬性真的用於?
- 11. Javascript Prototype需要.prototype。爲什麼?
- 12. 什麼是按鈕屬性「tooltip」用於?
- 13. 什麼是DisplayAttribute.GroupName屬性用於?
- 14. 什麼是完全用於jcifs.smb.client.username屬性?
- 15. Javascript:什麼是函數屬性,它有什麼意義?
- 16. 什麼是在HtmlTargetElement屬性用於Attributes屬性
- 17. 什麼時候使用@JsonProperty屬性,它用於什麼?
- 18. __kwdefaults__是一個函數對象屬性的用途是什麼?
- 19. 「this」在「on ..」屬性中的函數內引用了什麼?
- 20. 爲什麼這是一個使用lambda函數的屬性?
- 21. JS變量等於html數據屬性
- 22. Javascript Prototype屬性:基於原型的繼承
- 23. 什麼是Durandal JS中的數據視圖屬性
- 24. 模擬'類'時,爲什麼要在.prototype屬性中設置方法,而不是在構造函數本身中?
- 25. 使用JS將屬性應用於SVG提示'this.textBox.style未定義'。爲什麼?
- 26. 使用另一個文件的屬性調用JS函數
- 27. 爲什麼doxygen會截斷參數化的宏函數屬性?
- 28. OpenCL:cl :: Context構造函數中的屬性參數是什麼?
- 29. 爲什麼託管屬性只適用於類屬性,而不適用於python中的實例屬性?
- 30. OWL:爲什麼數據屬性不能是一個反函數屬性?
將函數作爲構造函數調用時,返回對象的'__proto__'屬性引用函數的'prototype'對象。 – 2011-06-06 18:26:21