示例代碼:app
// 原型鏈 function A(){ this.a = 'a'; } // 經過構造函數建立對象 var a = new A(); function B(){ this.b = 'b'; } // 將B的原型指向對象a B.prototype = a; // 經過構造函數建立對象 var b = new B(); console.log(b.b);// b console.log(b.a);// a function C(){ this.c = 'c'; } // 將C的原型指向對象b C.prototype = b; // 經過構造函數建立對象 var c = new C(); console.log(c.c);// c console.log(c.b);// b console.log(c.a);// a
原型鏈代碼分析圖:
函數
示例代碼:this
// 原型鏈 function A(){ // 將自有屬性改寫爲原型屬性 // this.a = 'a'; } A.prototype.a = 'a'; function B(){ // this.b = 'b'; } // 將B的原型指向 B.prototype = A.prototype; B.prototype.b = 'b'; /*B.prototype = { b : 'b' }*/ function C(){ this.c = 'c'; } // 將C的原型指向 C.prototype = B.prototype; var c = new C(); console.log(c.c);// c console.log(c.b); console.log(c.a);// a
示例代碼:spa
// 原型鏈 function A(){ // 將自有屬性改寫爲原型屬性 // this.a = 'a'; } A.prototype.a = 'a'; function B(){ // this.b = 'b'; } // 將B的原型指向 B.prototype = A.prototype; B.prototype.b = 'b'; function C(){ // this.c = 'c'; } // 將C的原型指向 C.prototype = B.prototype; C.prototype.c = 'c'; var c = new C(); console.log(c.c);// 調用結果爲 c console.log(c.b);// 調用結果爲 b console.log(c.a);// 調用結果爲 a var a = new A(); console.log(a.a);// 調用結果爲 a console.log(a.b);// 調用結果爲 b console.log(a.c);// 調用結果爲 c var b = new B(); console.log(b.a);// 調用結果爲 a console.log(b.b);// 調用結果爲 b console.log(b.c);// 調用結果爲 c
語法 : 定義一個函數 - 再將構造函數建立的對象返回,用於實現對象之間的繼承prototype
參數code
示例代碼:對象
function fn(obj,prop) { // 定義一個臨時的構造函數 function Fun() { // 遍歷對象的屬性和方法 for(var attrName in prop){ this[attrName] = prop[attrName]; } } // 將函數的參數做爲構造函數的原型 Fun.prototype = obj; // 將構造函數建立的對象進行返回 return new Fun(); } var obj = { name : '皮卡丘' }; // 調用函數 var result = fn(obj,{ age : 26, sayMe : function () { console.log('一花一世界'); } }); console.log(result.age);// 調用結果爲 26 result.sayMe();// 調用結果爲 一花一世界
示例代碼:繼承
// 利用Object.create() var obj ={ name : '皮卡丘' }; var newObj = Object.create(obj,{ age : { value : 18 }, sayMe : { value : function () { console.log('一花一世界'); } } }); console.log(newObj.age);// 調用結果爲 18 newObj.sayMe();// 調用結果爲 一花一世界
示例代碼:圖片
// 定義父級對象的構造函數 function Parent() { this.parent = '嘎嘎嘎'; } // 定義子級對象的構造函數 function Child() { // 調用父級對象的構造函數 - 使用apply()或call()方法 Parent.call(this); this.child = '嚯嚯嚯'; } // 建立子級對象 var child = new Child(); console.log(child);// 調用結果爲 Child { parent: '嘎嘎嘎', child: '嚯嚯嚯' }
分析圖:
原型鏈
示例代碼:
function Parent(){ // 構造函數的自有屬性 this.name = '豬八戒'; } // 構造函數的原型屬性 Parent.prototype.age = 500 + '歲'; function Child(){ // 繼承父級構造函數中的自有屬性 Parent.call(this); this.job = '淨壇使者'; } // 繼承父級構造函數中的原型屬性 Child.prototype = Parent.prototype; var child = new Child(); console.log(child.job);// 調用結果爲 淨壇使者 console.log(child.age);// 調用結果爲 500歲 console.log(child.name);// 調用結果爲 豬八戒