多層繼承
先前介紹都類似 Object > Dog > 實體
這樣的繼承鍊。
若想在 Dog
前面在多加一層原型變成 Object > Animal > Dog > 實體
呢?
這時就要用到 Object.create()
MDN Object.create()
Object.create(proto[, propertiesObject])
- proto: 指定新物件的原型 (prototype) 物件。
- propertiesObject: 選用,為一物件(細節參考文檔)。
範例說明:
- 在 Animal 上新增原型方法
move()
Dog()
繼承 Animal的原型 prototype
,並新增 bark()
原型方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| function Animal(family) { this.kingdom = '動物界'; this.family = family || '人界'; console.log('this', this); };
Animal.prototype.move = function () { console.log(this.name + '移動'); };
function Dog(name, color, size) { Animal.call(this, '犬科'); this.name = name; this.color = color || '白色'; this.size = size || '小'; }; Dog.prototype = Object.create(Animal.prototype);
Dog.prototype.constructor = Dog; Dog.prototype.bark = function() { console.log(this.name + '吠叫'); };
var Bibi = new Dog('比比', '棕色', '小'); console.log(Bibi); Bibi.bark(); Bibi.move();
function Cat(name, color, size) { Animal.call(this, '貓科'); this.name = name; this.color = color || '白色'; this.size = size || '小'; };
Cat.prototype = Object.create(Animal.prototype); Cat.prototype.constructor = Cat; Cat.prototype.meow = function() { console.log(this.name + '喵喵叫'); };
var Kity = new Cat('凱蒂', '', '大'); console.log(Kity); Kity.meow(); Kity.move(); Kity.bark();
|
參考資料
六角學院 - JavaScript 核心篇