JS常见的继承方式

来源:互联网 发布:ubuntu浏览器不能上网 编辑:程序博客网 时间:2024/05/16 12:13

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(); //wozienMan.showAge(); //12

这是js中继承最常用的;把子类实例独有的属性(包括常用和引用类型)利用call方式继承,方法什么的写到原型对象中,利用原型链进行继承。

0 0
原创粉丝点击