2014-02-06 50 views
0

我有一个私有函数,我使用了几个公共函数。基本上,公共函数是向对象添加内容的捷径。像:使用.bind私有函数和构造函数

function Basket() { 
    this.apple = []; 
    this.orange = []; 
} 

// Private 
var _add = function (to) { 
    this[to].push(new Fruit(to)); 
} 

// Public 
Basket.prototype.addApple = function() { 
    _add.call(this, 'apple'); 
} 

Basket.prototype.addOrange = function() { 
    _add.call(this, 'orange'); 
} 

我想删除.call和使用.bind代替。但是这样做:

var _add = function (to) { 
    this[to].push(new Fruit(to)); 
}.bind(Basket); 

这将无法正常工作,因为它将它绑定到构造函数而不是对象实例。

这甚至有可能实现吗?或者应该使用.call更好?或者是我的设计模式搞砸了!?

回答

1

你似乎根本不需要任何绑定。为什么不呢?

function Basket() { 
    this.apple = []; 
    this.orange = []; 
} 

// Private 
var _add = function (basket, to) { 
    basket[to].push(new Fruit(to)); 
} 

// Public 
Basket.prototype.addApple = function() { 
    _add(this, 'apple'); 
} 

var b = new Basket(); 
b.addApple(); 
+0

是的,如果我添加私人功能的对象。但我不想这样做:) –

+0

@distractedBySquirrels哦,我现在得到你的问题! –

+0

@distractedBySquirrels我编辑过。那是你要的吗 ? –

相关问题