1. 程式人生 > >原型鏈和麵向物件

原型鏈和麵向物件

1.建立物件有幾種方法

// 物件字面量
var o1 = {name:'o1'}
var o11 = new Object({name:'011'})
// 建構函式
var M = new Function(){this.name=m}
var m =new M()
// 用物件的原型建立
var P={name:'o3'}
var o3 = Object.create(P)

2.原型鏈

這裡寫圖片描述

3. instanceof 原理

  • 例項物件的proto 和建構函式的protoType 是否是同一個引用
    這裡寫圖片描述

4.類的宣告

//類的宣告
function Animal
(name) {
this.name = name; } // es6 class Animal2 { constructor () { this.name = 'a' } } //例項化 new Animal('ss'); new Animal2();

5. 類的繼承方式

 /*
    * 藉助建構函式實現繼承
    * 缺點:Parent1原型物件上的屬性和方法 不能被繼承
    * */
    function Parent1 () {
        this.name = 'parent1'
    }

    function
Child1 () {
Parent1.call(this)// 將父級建構函式this 指向子類建構函式 this.type = 'child1' } console.log(new Child1()) /* * 藉助原型鏈繼承 * 缺點:父類屬性和方法修改,子類不同例項的屬性或方法會一起修改 * */ function Parent2 () { this.name = 'parent1' } function Child2 () { this.type = 'child1'
} Child2.prototype = new Parent2(); /* * 組合方式 * 缺點:父級的建構函式執行了兩次 * */ function Parent3 () { this.name = 'parent1' } function Child3 () { Parent3.call(this) this.type = 'child1' } Child3.prototype=new Parent3() /* * 組合繼承的優化1 * 缺點:子類constructor指向出現錯誤 * */ function Parent4 () { this.name = 'parent1' } function Child4 () { Parent4.call(this) this.type = 'child1' } Child4.prototype=Parent4.prototype /* * 組合繼承的優化2 * * */ function Parent5 () { this.name = 'parent1' } function Child5 () { Parent5.call(this) this.type = 'child1' } Child5.prototype=Object.create(Parent5.prototype) Child5.prototype.constructor=Child5