“Parasitic Combination Inheritance” in Professional JavaScript for Web Developers

后端 未结 2 1728
囚心锁ツ
囚心锁ツ 2020-12-10 16:59

Professional JavaScript for Web Developers, Third Edition by Nicholas C. Zakas (Wrox, 2012, p.210-215 describes \"Parasitic Combination Inheritance\" using the following fun

相关标签:
2条回答
  • 2020-12-10 17:31

    Demo You overwrite constructor prototype so you lose SubType.prototype.constructor and if you want later to know object constructor you ought to explicitly set it...

    function object(o){
        function F(){}
        F.prototype = o;
        return new F();
    }
    
    function inheritPrototype(subType, superType) {
        var prototype = object(superType.prototype); 
        prototype.constructor = subType; //if omit (new SubType()).constructor === superType 
        subType.prototype = prototype; 
    }
    
    function SuperType(name){
        this.name = name;
    }
    
    function SubType(name, age){
        SuperType.call(this, name);
        this.age = age;
    }
    
    inheritPrototype(subType, superType);
    
    0 讨论(0)
  • 2020-12-10 17:33

    The assignment to "constructor" is not mandatory as the assignment to "prototype" is. The reason to do it is that function prototypes usually come with the "constructor" property set by default. It might be useful for libraries that copy objects since you can get a reference to that object's constructor from the object itself.

    function Foo(){
    }
    
    obj = new Foo();
    
    console.log(obj.constructor); //function Foo
    
    0 讨论(0)
提交回复
热议问题