1

这是 ES5 的 Object.create 的独立实现:

window.createObject = (function() {
    var F = function () {};
    return function(o) {
        F.prototype = o;
        return new F();
    }
}());

及其使用示例:

var cat = createObject(animal);

我注意到animal在尝试调用私有函数时,内部变得有点混乱,例如:

animal = (function() {
    function privFunc(arg) {
        this.property;
    }

    function publFunc(arg) {
        privFunc.call(this, arg);
    }

    return {
        publFunc: publFunc
    }
}());

有没有更简洁的方法来遵循这种模式?特别是,消除对privFunc.call(this, arg).

另一种同样丑陋的方式是:

function privFunc(animal, arg) {
    animal.property;
}

function publFunc(arg) {
    privFunc(this, arg);
}
4

1 回答 1

1

不幸的是,这是结合 Object.create 和私有函数的唯一方法。创建的新对象只能访问定义原型的模块公开的公共方法。在模块中使用私有方法需要将您想要使用的对象传递给这些方法 - 作为命名参数或操作this

于 2011-04-19T01:55:21.847 回答