1.利用原型链prototype;
function person()
{
this.name = 'person';
}
person.prototype.show = function(){
return this.name;
}
function man(){
this.subname = 'man';
}
man.prototype = new person();
var Man = new man();
Man.show();
console.log(Man.name);
console.log(Man.subname);
这种方法的弊端:1.父类的属性不能是引用类型,不然他的子类公用这个应用类型,作修改的时候就会影响了;2.子类不能向父函数传递参数。
2.利用call(),伪造对象的方法;
function person(name,age)
{
this.name = name;
this.age = age;
}
function man(name,age){
person.call(this,name,age); //这里就是伪造成person的一个事例
}
var Man = new man('wozien',12);
console.log(Man.name);
console.log(Man.age);
3.利用apply(),和call区别在于参数传递方式;
function person(name,age)
{
this.name = name;
this.age = age;
}
function man(name,age){
person.apply(this,[name,age]); //这里就是伪造成person的一个事例
}
var Man = new man('wozien',12);
console.log(Man.name);
console.log(Man.age);
第2,3种方法解决了第1中的弊端,但是要是继承父类方法的话,子类都要重新分配内存,浪费资源,所以也是很少单独使用的。
4.组合call+prototype,最常用的一种方式;
function person(name)
{
this.name = name;
}
person.prototype.showName = function(){
return this.name;
}
function man(name,age){
person.call(this,name);
this.age = age; //这里就是伪造成person的一个事例
}
man.prototype = new person();
man.prototype.showAge = function(){
return this.age;
}
var Man = new man('wozien',12);
Man.showName(); //wozien
Man.showAge(); //12
这是js中继承最常用的;把子类实例独有的属性(包括常用和引用类型)利用call方式继承,方法什么的写到原型对象中,利用原型链进行继承。