2011-03-22 65 views
1

这是一个独立的实施ES5的的Object.create的:的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

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