1.原型继承
function Dog(){
this.a = function(){
alert(“123”);
}
}
function SDog(){
this.b = function(){
alert(“321”);
}
}
//
Dog.prototype = new SDog();
var DD = new Dog();
DD.b();//继承了321
2.原型冒充继承
function Cat(leg,tail){
this.leg = leg;
this.tail = tail;
this.climd = function(){
alert(“我会爬树 “)
}
}
function Tiger(leg,tail,color){
this.color = color;
this.parent = Cat;
this.parent.apply(this,arguments);
delete this.parent;
}
var tiger = new Tiger(4,1,’blue’);
tiger.climd();
过程是什么?
答:其实就是,在用Tiger造对象前,用Tiger的语句影响一个空对象{},
在此过程中,Tiger影响空对象前,先有Cat函数实施影响
因此,最终得到的对象是由Cat和Tiger两者共同作用过的一个对象,所有Tiger对象有climd 不是从原型链中找过来的,是一个实实在在的属于这个对象
3.复制继承
//复制继承就是把父对象的所有属性,复制到自己对象上
function Cat(leg,tail){
this.leg = leg;
this.tail = tail;
this.climd = function(){
alert(“我会爬树 “);
}
}
function Tiger(color){
this.color = color;
this.extend = function(parent){
//循环一遍parent把这些东西复制到自身属性上
for(var key in parent){
// console.log(key);
this[key] = parent[key];
}
}
}
var tiger = new Tiger(‘red’);
console.log(tiger);//red,extend方法
tiger.extend(new Cat(4,1));//把传参过来的属性查询一遍
console.log(tiger);//red,extend方法,leg,tail,climd方法
tiger.climd();//可以使用方法
//复制继承的比原生链条继承好处:原生链一影响就是一大片下游的所有对象,复制继承只是copy,jQuery也用了复制继承