标签:优点 动物 als 有一个 简单 log 语句 instance ons
首先要有一个父类
// 定义一个动物类 function Animal (name) { // 属性 this.name = name || ‘Animal‘; // 实例方法 this.sleep = function(){ console.log(this.name + ‘正在睡觉!‘); } } // 原型方法 Animal.prototype.eat = function(food) { console.log(this.name + ‘正在吃:‘ + food); };
1.原型链继承
核心:将父类的实例作为子类的原型
//原型链继承 function Cat(){ } Cat.prototype = new Animal(); Cat.prototype.name = ‘cat‘; var cat = new Cat(); console.log(cat.name);//cat console.log(cat.eat(‘fish‘));//undefined console.log(cat.sleep());//undefined console.log(cat instanceof Animal);//true console.log(cat instanceof Cat);//true
特点:
缺点:
new Animal()
这样的语句之后执行。必须要在new Animal()
这样的语句之后执行,不能放到构造器中核心:使用父类的构造函数来增强子类实例,等于是复制父类的实例属性给子类(没用到原型)
function Cat(name){ Animal.call(this); this.name = name || ‘Tom‘; } var cat = new Cat(); console.log(cat.name);//Tom console.log(cat.sleep());//undefined console.log(cat instanceof Animal); // false console.log(cat instanceof Cat); // true
特点:
缺点:
核心:通过调用父类构造,继承父类的属性并保留传参的优点,然后通过将父类实例作为子类原型,实现函数复用
function Cat(name){ Animal.call(this); this.name = name || ‘Tom‘; } Cat.prototype = new Animal(); // 组合继承也是需要修复构造函数指向的。 Cat.prototype.constructor = Cat; // Test Code var cat = new Cat(); console.log(cat.name); console.log(cat.sleep()); console.log(cat instanceof Animal); // true console.log(cat instanceof Cat); // true
特点:
缺点:
标签:优点 动物 als 有一个 简单 log 语句 instance ons
原文地址:https://www.cnblogs.com/zhaosijia----1234/p/8858099.html