JavaScript對象的屬性,是由自身屬性加上原型鏈中的屬性,對象的原型鏈是由建立它的構造函數決定的,也就是建立對象時,調用的new function,例如:javascript
// 定義一個構造函數 // JavaScript中構造函數和普通函數沒區別,只是調用的時候使在前面加關鍵字new則爲調用構造函數,不加則爲普通調用 // 構造函數約定使用大寫字母開頭(便於與普通函數的區分) function Foo() {} // 經過構造函數新建一個對象 var foo = new Foo();
這時新建的foo對象將擁有Foo.prototype屬性和自身的屬性,假設屬性重合,則採用就近原則,使用對象的屬性java
假設咱們使用的是語法糖來建立對象的,底層其實也是調用構造函數來建立的函數
// 經過語法糖來建立對象 var foo = { x: 1, y: 2 }; // 等價於 var foo = new Object(); foo.x = 1; foo.y = 2;
也就是說使用語法糖來建立的對象,也默認繼承了Object.prototype屬性學習
另外全部的對象的原型都繼承自Object.prototype,也就是在上面經過調用構造函數Foo()建立的對象除了繼承了Foo.prototype,還繼承了Object.prototype,以下所示:spa
Object.prototype.a = "Object.prototype.a"; function Foo() {} Foo.prototype.b = "Foo.prototype.b"; var foo = new Foo(); foo.c = "foo.c"; console.log("foo.a : " + foo.a); console.log("foo.b : " + foo.b); console.log("foo.c : " + foo.c); /* foo.a : Object.prototype.a foo.b : Foo.prototype.b foo.c : foo.c */
今天學習的先粗略寫到這,改天有空再補充~prototype