自执行函数继承

时间:2013-12-05 14:45:59

标签: javascript

我想知道如何让child从自身和base获取原型方法。

此外,有任何方法可以做到

child.prototype = Object.create(base.prototype);
child.prototype.constructor = child;

child IIFE内部,而不是在其外部。

var base = (function(){

    var cls = function(){

    };

    cls.prototype = {
        doStuff: function(){
            console.log('dostuff');
        }
    };

    return cls;

})();

var child = (function(){

    var cls = function(){
        base.call(this);    
    };

    cls.prototype = {
        doOtherStuff: function(){
            console.log('doOtherStuff');
        }
    };

    return cls;

})();

child.prototype = Object.create(base.prototype);
child.prototype.constructor = child;

var b = new child();
b.doStuff();
b.doOtherStuff();

http://jsfiddle.net/9uGsA/

3 个答案:

答案 0 :(得分:1)

  

我想知道如何让孩子从自己和基地获得原型方法。

  1. 在设置子原型之前执行child.prototype = Object.create(base.prototype);
  2. 不要执行cls.prototype = ...,而是一次向cls.prototype添加一个属性。
  3.   

    此外,有任何方法可以在child IIFE内部进行[继承],而不是在其外部。

    当然,只需使用cls代替child

    http://jsfiddle.net/7uCwz/

    奖金小提琴:http://jsfiddle.net/7uCwz/1/

答案 1 :(得分:1)

定义一个函数http://jsfiddle.net/9uGsA/1/

function inherit(base, child, proto) {
    child.prototype = Object.create(base.prototype);
    child.prototype.constructor = child;

    proto&&Object.keys(proto).forEach(function(key){
        child.prototype[key] = proto[key];    
    })

}

并像这样使用

var child = (function(){

    var cls = function(){
        base.call(this);    
    };

    inherit(base, cls, {doOtherStuff: function(){
            console.log('doOtherStuff');
    }});


    return cls;

})();

答案 2 :(得分:0)

新的更简单的答案:

result.Search