模块中的Object.create和私有函数

时间:2011-03-22 00:35:07

标签: javascript object-create

这是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);
}

1 个答案:

答案 0 :(得分:1)

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