分享

JS类的继承之Call方法

 向着太阳生 2014-07-16
Person.call(this,参数1,参数2,...);这种继承方法只能继承属性及以属性的形式添加的方法

比如
    function Person(name,sex){
            this.name = name;
            this.sex =sex;
            this.test=function(){
                alert(this.sex);
            }
        }

    function Worker(name,sex,job){
            Person.call(this,name,sex);
            this.job = job;
        }
var obj1 = new Worker('姓名','男’,'工程师');
obj1.test();//可以访问test方法,其实是访问test属性,只是test属性的值是个函数而已。

如果是以原型prototype给Person类添加的方法,则子类的对象obj1无法访问父类的方法
比如
Person.prototype.showName=function(){
            alert(this.name);
        }
var obj2 = new Worker('姓名','男’,'工程师');
obj2.showName();//会报错,访问不到showName方法

解决方案是把父类的原型赋值给子类的原型
Worker.prototype = Person.prototype//此语句有引用赋值的BUG,导致当子类改变时父类也会跟着改变,解决方案
for(var i in Person.prototype){
    Worker.prototype[i] = Person.prototype[i]
}

 
 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多