将.bind与私有函数和构造函数一起使用

时间:2014-02-06 14:57:55

标签: javascript design-patterns call 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 个答案:

答案 0 :(得分: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();