继承 - javascript中能使用匿名对象吗?
高洛峰
高洛峰 2017-04-11 11:31:07
[JavaScript讨论组]

今天在总结js的继承时,遇到这么个问题,在子类型中重写超类型中的方法之后,子类型的实例调用这个方法就是调用这个重写之后的;超类型的实例调用这个方法,调用的是超类型中的方法,我偷懒就没有再创建超类型的实例,而是仿照java中的匿名对象直接调用这个方法,居然返回了正确的值。

想问一下大家这个用法对不对,符不符合js的规范,或者对于js中的匿名对象还有什么奇淫技巧。
以下是我的代码:

    function SuperType(){
        this.property = true;    
    };
    
    SuperType.prototype.getSuperValue = function(){  
        return this.property;
    };
    
    function SubType(){
        this.subproperty = false;
    }
    
    //让SuperType继承SubType
    SubType.prototype = new SuperType();
    //添加新方法
    SubType.prototype.getSubValue = function(){
        return this.subproperty;
    };
    //重写超类型中的方法
    SubType.prototype.getSuperValue = function(){
        return false;
    };
    //子类型实例调用
    var instance = new SubType();
    alert(instance.getSuperValue());      //false
    //超类型实例调用
    alert((new SuperType()).getSuperValue());   //我仿照java这么写,居然返回true
高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(2)
高洛峰
 alert((new SuperType()).getSuperValue());   //我仿照java这么写,居然返回true

你定义的就是true 所以返回true

function SuperType(){
        this.property = true;    
    };
    
    SuperType.prototype.getSuperValue = function(){  
        return this.property;
    };
黄舟

其实这么干会出现一个问题就是当你父类中的this指向一个对象时这个对象会被子类的多个实例共享,因为你的之类引用了父类的实例作为其原型链,我们知道原型链中的方法属性对象皆是在内存中共享的。所以完整的继承应该在子类中第一时间call或apply一次父类方法实现将父类中直接以this指针指向的属性方法对象在子类中实现,即

function SubClass(){
    SuperClass.call(this);
}
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号