如何将javascript变量绑定到对象

如何将javascript变量绑定到对象,javascript,node.js,Javascript,Node.js,假设我有一个对象: obj = {func1: function(){return $(h1)};} // notice, there is no $ defined anywhere... 在别的地方我有一条线 jq = require('jQuery'); 现在,我想编写一个函数或其他东西,将object和jQuery作为参数并绑定它,这样我就可以执行以下操作: obj2 = myBind(obj, jq); obj2.func1(); // works 注意,任何地方都没有定义$

假设我有一个对象:

obj = {func1: function(){return $(h1)};} // notice, there is no $ defined anywhere...
在别的地方我有一条线

jq = require('jQuery');
现在,我想编写一个函数或其他东西,将object和jQuery作为参数并绑定它,这样我就可以执行以下操作:

obj2 = myBind(obj, jq);
obj2.func1(); // works 
注意,任何地方都没有定义$

然后它将保持未定义状态,除非您在任何父范围(如全局范围)中创建这样的变量

但是,您不能将变量注入到您不“拥有”的作用域中,您不能从函数引用访问
obj.func1
闭包的作用域-您需要事先将代码放入该作用域中

但是,您可以使用属性而不是变量,例如

var obj = {
    func1: function() {
        return this.$("h1");
    }
};
// later:
obj.$ = require("jQuery");
obj.func1();

@bergi所说的是正确的。另一种解决方案可能是以某种方式使用Function.bind:

var obj = {
  func1: function() {
    return this("h1");
  }
};
obj.func1 = obj.func1.bind(require('jQuery'));
// later:
obj.func1();

顶行中的
$
依赖于变量范围。因此,如果
require
来自代码的其他部分,则需要将
$
定义为全局变量。或者,如果它们在同一范围内,则可以使用本地的。但是没有任何其他方法可以将
$
jq
关联。如果您正在编写一个插件,请在您的文档中。当您将它添加到原型中时,您仍然可以使用特殊的
$
变量。但是,如果您没有在任何地方定义
$
,您可以简单地重新分配
$=jq在您的
jq=require('jQuery')之后行。
var obj = {
  func1: function() {
    return this("h1");
  }
};
obj.func1 = obj.func1.bind(require('jQuery'));
// later:
obj.func1();