1、传统继承形式 ——>原型链继承
缺陷:过多的继承了没用的属性
function SuperType() { this.property = true; }
SuperType.prototype.getSuperValue = function() { return this.property; } function SubType () { this.property = false; ) //继承superType SubType.prototype = new SuperType(); //添加新的方法 SubType.prototype.getSubValue = function() { return this.property; } //重写超类中的方法
SubType.prototype.getSuperValue = function() {
return false;
} var instance = new SubType(); console.log(instance.getSuperValue) //false
2、借用构造函数
不足:不能继承借用构造函数的原型;每次构造函数都多走一个函数
function SuperType(name, age) { this.name = name; this.age = age; } function SubType(name, age, gender){ SuperType.call(this, name, age); //SuperType.apply(this, [name, age]); this.gender = gender; } var instance = new SubType("huang", 18, "male"); console.log(instance.name) //"huang" console.log(instance.gender) //"male"
3、圣杯模式
var inherit = (function() {
var F = function() {};
return function(Target, Origin) {
F.prototype = Origin.prototype;
Target.prototype = new F();
Target.prototype.constructor = target;
Target.prototype.uber = Origin.prototype;
}
}())
***方法
1、obj.hasOwnProperty(property) 判断对象是否有某个属性
2、obj instanceof super 判断obj的原型链上是否存在super
3、Object.create(原型)
var obj = Object.create(null) //这样构造的对象原型链为空