在JavaScript中,除了null,undefined外,全部的變量均可以當作對象使用。對象由函數建立,函數的原型鏈指向對象,函數也是一種對象,本身定義的函數由Fuction建立。函數
每一個函數都有一個prototype屬性和隱藏屬性__proto__,prototype的值爲一個對象,對象裏有一個constructor指向這個函數自己。spa
除了JavaScript自帶的Object有prototype屬性外,普通對象沒有prototype屬性,有隱藏的屬性__proto__,指向建立該對象的原型。可是Object對象有prototype屬性裏面除了constructor外,還有一些共享方法如:hasOwnProperty,isPrototypeOf,toString等等。prototype
使用new關鍵字加上函數建立的對象,此對象的隱藏屬性__proto__指向的是構造函數的prototype對象,即由構造函數建立的對象可以直接使用構造函數prototype對象中的變量和方法。若是構造函數有顯示的返回對象,則建立的函數爲返回的對象。code
每一個函數都有一個prototype原型,每一個對象都有一個__proto__隱藏屬性,可爲隱式原型。對象
4個實體:Function(JavaScript自帶),Object(Javascript自帶),Foo(函數),foo(由函數建立的對象)。blog
function Foo(){}; var foo = new Foo();
Foo.prototype.constructor--->Foo;繼承
foo.__proto__===>Foo.prototype;ip
Foo.__proto__===>Function.prototype;原型鏈
Foo.prototype.__proto__===>Object.prototype;原型
Function.__proto__===>Object.prototype;
Object.__proto__===>Function.prototype;
Object.prototype.__proto__===>Null。
新建立的對象沿原型鏈繼承Object.prototype的方法。