首页 > javascript中能使用匿名对象吗?

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

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

function SubClass(){
    SuperClass.call(this);
}

 alert((new SuperType()).getSuperValue());   //我仿照java这么写,居然返回true

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

function SuperType(){
        this.property = true;    
    };
    
    SuperType.prototype.getSuperValue = function(){  
        return this.property;
    };
【热门文章】
【热门文章】