javascript代码实例教程-javascript继承―prototype最优两种继承(空函数和循环拷贝)(3)

发布时间:2019-01-27 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了javascript代码实例教程-javascript继承―prototype最优两种继承(空函数和循环拷贝)(3)脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
小宝典致力于为广大程序猿(媛)提供高品质的代码服务,请大家多多光顾小站,小宝典在此谢过。 一、利用空函数实现继承

参考了文章javascript继承—PRototyPE属性介绍(2) 中叶小钗的评论,对这篇文章中的方案二利用一个空函数进行修改,可以解决创建子类对象时,父类实例化的过程中特权属性和特权方法,私有属性,私有方法的空耗资问题。

 

复制代码

function Person(name,age){

    this.name = name;

    this.age = age;

}

Person.prototype = {

    constructor:Person,

    sayHi:function(){

        alert('hi');

    }

}

 

function Student(name,age,grade){

    Person.call(this,name,age);

    this.grade = grade;

}

 

function Empty(){}

Empty.prototype = Person.prototype;

 

Student.prototype = new Empty();

Student.prototype.constructor = Student;

 

VAR p1 = new Person('xiaoming',10);

var s1 = new Student('xiaohong',9,3);

console.LOG(p1);//Person { name="xiaoming", age=10, sayHi=function()}

console.log(s1);//Student {name="xiaohong", age=9, grade=3, 更多...}

console.log(p1.constructor);//Person(name,age) 父类的实例指向仍是父类

console.log(s1.constructor);//Student(name,age,grade) //子类的实例指向仍是子类

复制代码

这种情况下修改Student的prototype就不会影响到Person的prototype对象了,并且,因为直接将Person的prototype赋给Empty的prototype,所以不会存在特权属性(实例属性)浪费资源的问题。这样利用空函数就能很好的解决共有方法的继承问题了。当然这时Student.prototype中的constructor是Person,所以最好加上Student.prototype.constructor = Student转换过来。

 

二、利用循环遍历拷贝的方法实现继承

 

同样对于文章javascript继承—prototype属性介绍(2)中的方案三,其实这是一种拷贝的方法,将父类所有的共有方法拷贝到子类中去。

 

复制代码

function Person(name,age){

    this.name = name;

    this.age = age;

}

Person.prototype = {

    constructor:Person,

    sayHi:function(){

        alert('hi');

    }

}

 

function Student(name,age,grade){

    Person.call(this,name,age);

    this.grade = grade;

}

 

for(var i in Person.prototype){Student.prototype[i] = Person.prototype[i]}

Student.prototype.constructor = Student;

Student.prototype.study = function(){

    alert('study');

}

var p1 = new Person('xiaoming',10);

var s1 = new Student('xiaohong',9,3);

console.log(p1);//Person { name="xiaoming", age=10, sayHi=function()}

console.log(s1);//Student { name="xiaohong", age=9, grade=3, 更多...}

console.log(p1.constructor);//Person(name,age) 父类的实例指向仍是父类

console.log(s1.constructor);//Student(name,age,grade) //子类的实例指向仍是子类

复制代码

这种方法直接将父类的共有方法利用遍历的模式拷贝到子类中去。这样就避免了子类实例直接指向父类的问题,也不会出现修改子类的共有方法,对父类产生了影响。也算一种比较完美的继承。

 

当然,这里主要探讨了js里共有方法的继承实现问题。对于属性的继承主要用的call方法(也可以看成将父类的构造函数绑定到子类中去)暂时先不探讨了。

觉得可用,就经常来吧! 脚本宝典 欢迎评论哦! js脚本,巧夺天工,精雕玉琢。小宝典献丑了!

脚本宝典总结

以上是脚本宝典为你收集整理的javascript代码实例教程-javascript继承―prototype最优两种继承(空函数和循环拷贝)(3)全部内容,希望文章能够帮你解决javascript代码实例教程-javascript继承―prototype最优两种继承(空函数和循环拷贝)(3)所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。