首页 > 代码库 > js中的继承
js中的继承
实现原型链有一种基本模式,其代码大致如下:
function A(){
this.property = true;
}
A.prototype.getAvalue = http://www.mamicode.com/function(){
return this.property;
};
function B(){
this.property = false;
}
//继承了A
B.prototype = new A();
B.prototype.getBvalue = http://www.mamicode.com/function(){
return this.property;
};
var instance = new B();
console.log(instance.getBvalue());//true;
借用构造函数
function A(){
this.color = ["red","blue"];
}
function B(){
// 继承了A
A.call(this);
}
var instance1 = new B();
instance1.color.push("yellow");
console.log(instance1.color);//red,blue,yellow;
var instance2 = new B();
console.log(instance2.color);//red,blue;
1,传递参数
相对于原型链而言,借用构造函数有一个很大的优势,既可以在子类型构造函数中向超类型构造函数传递参数;如下:
function A(){
this.name = name;
}
function B(){
//继承了A,同时传递参数
A.call(this,"hello");
// 实例属性;
this.age = 27;
}
var instance = new B();
console.log(instance.name);//hello
console.log(instance.age);//27
2.借用构造函数的问题:如果仅仅是借用构造函数那么也将无法避免构造函数模式存在的问题,方法都在构造函数中定义,因此函数的复用就无从谈起。而且在超类型的原型中定义的方法相对,对子类型而言是不可见的,造成的结果是所有的类型都只能使用构造函数模式。
三.组合继承
组合继承,有时也叫为经典继承,指将原型链和借用构造函数的技术组合到一块,从而发挥二者之长的一种继承模式,思路是:使用原型链实现对原型属性和方法的继承,而通过借用构造函数来实现对实例属性的继承。
function A(name){
this.name = name;
this.colors = ["red","blue"];
}
A.prototype.sayName = function(){
alert(this.name);
};
function B(name,age){
A.call(this,name);
this.age = age;
}
// 继承方法
B.prototype = new A();
B.prototype.constructor = B;
B.prototype.sayAge = function(){
alert(this.age);
};
var instance1 = new B("hehe",27);
instance1.colors.push("yellow");
instance1.sayName();//hehe
instance1.sayAge();//27;
var instance2 = new B("haha",28);
console.log(instance2.colors);//red,blue
instance1.sayName();//haha
instance1.sayAge();//28;
js中的继承
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。