class 类
每個對象 都有 一個 .__proto__ 指向 所屬類的原型 ,每個原型都會 有 一個 constructor 指向所屬類
animal? ?的?.__proto__? 指向了 Animal 的 原型? ? ?
?
每個原型都會 有 一個 constructor 指向所屬類
?
?
?
實例的__proto__ 指向函數 的原型?
?
?
?我們可以繼承實例上的屬性 通過原型鏈
?
?完整demo
function Animal() {this._type= '動物';this.age = 14; } Animal.prototype.say = function() {console.log('say'); } //在函數內 this 指向函數本身 function Dog() {this.name='maike'Animal.call(this); //獲取父類 }var dog = new Dog(); let animal = new Animal(); //animal.__proto__ 指向 Animal 實例 的原型 //Animal 實例 的原型 的 構造函數指向 實例本身//每個對象 都有 一個 .__proto__ 指向 所屬類的原型 ,每個原型都會 有 一個 constructor 指向所屬類 console.log(animal.__proto__.constructor === Animal); // 每個實例的原型 的 __proto__ 指向 對象的 原型 console.log(Animal.prototype.__proto__==Object.prototype); //對象的原型的__proto__ 為null console.log(Object.prototype.__proto__); //實例的__proto__ 指向函數 的原型 console.log(Animal.__proto__==Function.prototype); console.log('-------------------------------------') Dog.prototype.__proto__=Animal.prototype; console.log(dog)輸出:
?
true true null true ------------------------------------- Dog { name: 'maike', _type: '動物', age: 14 }我們可以看出 Dog? 繼承了 Animal的 屬性? 方法
?
?
?我們可以通過? ??Object.setPrototypeOf? ?這個方法繼承父類??
這個方法有一個參數 ( 子類的原型,父類的原型)
Object.setPrototypeOf(Dog.prototype,Animal.prototype); console.log(dog)輸出:
Dog { name: 'maike', _type: '動物', age: 14 } 我們還可以通過 Object,create() 這個方法實現 Object.setPrototypeOf(Dog.prototype,Animal.prototype); console.log(dog); Dog.prototype = Object.create(Animal.prototype); console.log(dog);輸出:
Dog { name: 'maike', _type: '動物', age: 14 } Dog { name: 'maike', _type: '動物', age: 14 } create()? 方法的實現??
?
轉載于:https://www.cnblogs.com/guangzhou11/p/11371556.html
總結