js繼承經常使用的三種方法,記錄一下,立刻要面試了。面試
以爲有用能夠幫我點個贊嗎?謝謝了。函數
// 原型鏈繼承 function Parent() { this.name = '原型鏈繼承'; this.play = [1,2,3]; } Parent.prototype.getName = function () { console.log(this.name); } function Child() { this.type = '原型鏈繼承child'; } Child.prototype = new Parent(); // 原型鏈上的原型對象是通用的,改變一個,其餘的都會改變,但咱們不想全部對象都改變 var child1 = new Child(); var child2 = new Child(); child1.play.push(4) console.log(child1.play) console.log(child2.play)
// 構造函數繼承 function Parent() { this.name = '構造函數繼承'; this.play = [1,2,3]; } Parent.prototype.getName = function () { console.log(this.name); } function Child() { Parent.call(this) this.type = '構造函數繼承child'; } var child1 = new Child(); console.log(child1.getName) //構造函數繼承不會繼承原型鏈上的方法
// 組合繼承 // 原理:建立中間對象,中間對象的原型對象是父類的 function Parent() { this.name = '組合繼承'; this.play = [1,2,3]; } Parent.prototype.getName = function () { console.log(this.name); } function Child() { Parent.call(this) this.type = '組合繼承child'; } Child.prototype = Object.create(Parent.prototype); Child.prototype.constructor = Child; //沒有這句代碼,Child.prototype.constructor會指向Parent var child = new Child() console.log(child instanceof Child,child instanceof Parent); console.log(child.constructor);