javascript中能使用匿名对象吗?

发布于 2022-09-03 03:25:54 字数 933 浏览 17 评论 0

今天在总结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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

一指流沙 2022-09-10 03:25:54
 alert((new SuperType()).getSuperValue());   //我仿照java这么写,居然返回true

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

function SuperType(){
        this.property = true;    
    };
    
    SuperType.prototype.getSuperValue = function(){  
        return this.property;
    };
月下凄凉 2022-09-10 03:25:54

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

function SubClass(){
    SuperClass.call(this);
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文