定义一个动物类
// 定义一个动物类
function Animal (name) {
// 属性
this.name = name || 'Animal';
// 实例方法
this.sleep = function(){
console.log(this.name + '正在睡觉!');
}
}
// 原型方法
Animal.prototype.eat = function(food) {
console.log(this.name + '正在吃:' + food);
};
寄生组合继承
核心:通过寄生方式,去掉父类的实例属性,在调用两次父类的构造的时候,就不会初始化两次实例方法或属性,避免的组合继承的缺点,或者说是小bug。
function Cat(name){
Animal.call(this);
this.name = name || 'Tom';
}
/*
* 立即执行函数
* void function(){}() = (function(){})();
* 在很早的javascript版本里面就有void的用法了,这里就不再过于赘述。
* */
void function(){
// 创建一个没有实例方法的类
var Super = function(){};
Super.prototype = Animal.prototype;
//将实例作为子类的原型
Cat.prototype = new Super();
// 修复constructor
Cat.prototype.constructor = Cat;
}();
var cat = new Cat();
var log = console.log;
log (cat.name);
log (cat.sleep());
log (cat instanceof Animal);
log (cat instanceof Cat);
优点: 在js继承的六种方法[原型链,组合,拷贝,实例,构造,寄生组合]中算得上完美的继承方式。
缺点: 实现起来稍微有点复杂。
说明
原创作品,禁止转载和伪原创,违者必究!
网友评论