如何在不改变'this'的上下文的情况下在Javascript中“绑定”?

时间:2016-12-31 10:15:54

标签: javascript constructor closures this

我有一个构造函数和一个闭包。

我的构造函数:

var Item = function(data) {
  this.sayThis = function() {
    console.log(this);
  };
  this.data = data;
};

我的关闭功能:

var $item = function(document, window, ..., itemData) {
  return new Item(itemData);
}.bind(dontWannaPutAnythingHere, document, window, .../*except itemData*/);

如果我在'thisArg'使用任何东西,新形成的对象内的'this'的上下文往往是给出的。我不希望这样,但我仍然想绑定那些文档,窗口和东西,以便我可以在其他时间提供最后一个参数项数据。

我要将新功能称为

// Calling it normally.
var someItem = $item("chocolate");
// This should result in Item {data: "chocolate", ...}
// and not anything else.
var someItem = $item("chocolate").sayThis();

干杯, RJ

2 个答案:

答案 0 :(得分:1)

这似乎有效:

 var Item = function(data) {
  this.sayThis = function() {
    console.log(this);
  };
  this.data = data;
};

var $item = function(document, window, itemData) {
  return new Item(itemData);
}.bind(null, document, window);

// Calling it normally.
var someItem = $item("chocolate");
// This should result in Item {data: "chocolate", ...}
// and not anything else.
var someItem = $item("chocolate").sayThis();

它符合您的要求吗?

JSFIDDLE:https://jsfiddle.net/sfcakq2j/4/

答案 1 :(得分:-1)

如果您的代码中有bind(null, ...)模式,

'use strict'将无效。为什么不使用代替bind

var $item = (function(document, window){
    return itemData => new Item(itemData);
})(document, window);