继承和模块模式(Inheritance and module pattern)

2019-07-21 17:15发布

我试图实现与这样的模块模式的继承:

Parent = function () {

    //constructor
    (function construct () {
        console.log("Parent");
    })();

    // public functions
    return this.prototype = {

        test: function () {
            console.log("test parent");
        },


        test2: function () {
            console.log("test2 parent");
        }

    };
};


Child = function () {

    // constructor
    (function () {
        console.log("Child");
        Parent.call(this, arguments);
        this.prototype = Object.create(Parent.prototype);
    })();


    // public functions
    return this.prototype = {

        test: function()
        {
            console.log("test Child");
        }

    }

};

但我不能从孩子的实例调用test2()

var c = new Child();
c.test2(); // c.test2 is not a function

我错了吗?

Answer 1:

您没有使用正确的方法模块模式。 不知怎的,你的“构造”被称为一个立即调用的函数表达式( IIFE ),模块关闭并非如此。 它应该是倒过来。

此外,您不能分配给this.prototype 。 要创建原型对象的所有实例都将继承时,需要分配给prototype构造函数的性质(在this关键字甚至指出,以全球window对象的情况下)。

你应该只要你有它返回的构造函数,而不是该原型对象,从IIFE。

Parent = (function () {
    // constructor
    function construct () {
        console.log("Parent");
    };

    // public functions
    construct.prototype.test = function () {
        console.log("test parent");
    };
    construct.prototype.test2 = function () {
        console.log("test2 parent");
    };

    return construct;
})();


Child = (function () {
    // constructor
    function construct() {
        console.log("Child");
        Parent.apply(this, arguments);
    }

    // make the prototype object inherit from the Parent's one
    construct.prototype = Object.create(Parent.prototype);
    // public functions
    construct.prototype.test = function() {
        console.log("test Child");
    };

    return construct;
})();


Answer 2:

(function () {
    console.log("Child");
    Parent.call(this, arguments);
    this.prototype = Object.create(Parent.prototype);
})();

this指的是window ,因为你裹你的代码的功能。 拆除包装功能或通过this作为参数。



文章来源: Inheritance and module pattern