2011-03-22 66 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的值