优化1:
将子类原型直接指向父类原型;
缺点:
当子类原型的构造函数修改指向时,父类的构造函数也会随之改变。不能判断子类实例的直接构造函数(到底是子类构造函数还是父类构造函数)
/**
* 父类构造函数
* name 基础属性
* hobby 引用属性
* say 引用类型functio
* happy 原型方法
*/
function Parent(name) {
this.name = name;
this.hobby = ['basketball', 'ping-pang', 'reading'];
this.say = function() {
console.log('parent say');
}
}
Parent.prototype.happy = function() {
console.log('go to happy');
}
/**
* 子类构造函数
*/
function Child(name, age) {
Parent.call(this, name);
this.age = age;
}
Child.prototype = Parent.prototype; // @@核心修改@@
Child.prototype.constructor = Child;
console.log(Child.prototype.constructor); // function Child
console.log(Parent.prototype.constructor); // function Child
优化2:完美继承
/**
* 父类构造函数
* name 基础属性
* hobby 引用属性
* say 引用类型functio
* happy 原型方法
*/
function Parent(name) {
this.name = name;
this.hobby = ['basketball', 'ping-pang', 'reading'];
this.say = function() {
console.log('parent say');
}
}
Parent.prototype.happy = function() {
console.log('go to happy');
}
/**
* 子类构造函数
*/
function Child(name, age) {
Parent.call(this, name);
this.age = age;
}
Child.prototype = Object.create(Parent.prototype); // @@核心修改@@
Child.prototype.constructor = Child;