一切皆爲對象。 javascript
function 也是對象, 類型是 function, 原型是 Function(){}; java
hasOwnProperty函數:
hasOwnProperty是Object.prototype的一個方法,它但是個好東西,他能判斷一個對象是否包含自定義屬性而不是原型鏈上的屬性,由於hasOwnProperty 是 JavaScript 中惟一一個處理屬性可是不查找原型鏈的函數。 數組
.prototype 屬性:
對象的原型,指向對象的原型。 javascript 採用的是原型鏈集成方式。 函數
.constructor 屬性:
constructor 屬性返回對建立此對象的數組函數的引用。 this
.constructor 的應用:
好比獲取個目標對象同樣的 對象,可使用 new this.constructor(); prototype
instanceof 爲判斷一個對象是否爲某一數據類型,或一個變量是否爲一個對象的實例;返回boolean類型
語法爲 o instanceof A 對象
javascript中instanceof和類的細節 繼承
在javascript裏,每一個function都有一個prototype屬性,這個屬性的用途是實現繼承機制。必以下面定義的function class1:
function class1(){}
class1.prototype = {a:10,b:100};
則class1的每一個實例都會從prototype繼承a和b這兩個屬性。
同時,每一個對象都會有一個內部的屬性_proto_(不一樣的javascript虛擬機實現用的名字可能不一樣),這個屬性對js開發人員不可見,只在虛擬機內部使用。每當建立一個對象的時候,這個對象的_proto_就會被賦值爲這個對象的構造函數的prototype,這樣對象的_proto_屬性和構造函數的prototype引用相同的對象,而且一旦對象建立完成,_proto_屬性就不會改變。 這樣經過對象的_proto_屬性,以及_proto_所引用的對象的_proto_屬性,就構成了一個_proto_鏈。 當訪問一個對象的屬性和方法的時候,js虛擬機正是經過這個_proto_鏈來查找的。
關於instanceof:
假設有一條這樣的語句:
o instanceof c;
在上面的語句執行過程當中,虛擬機會把c.prototype和o的_proto_鏈上的節點逐個進行比較,若是找到相等的節點,則返回true,不然返回false。 ip
JavaScript中__proto__與prototype的關係1、全部構造器/函數的__proto__都指向Function.prototype,它是一個空函數(Empty function)
2、全部對象的__proto__都指向其構造器的prototype
原型鏈