在javascript中更改回调的全局范围

时间:2014-12-20 11:37:28

标签: javascript node.js

这有点棘手。我想在传递的回调中改变全局范围

var Class = function() {
};

Class.prototype.add = function(a, b) {
    return a + " + " + b;
};

Class.prototype.api = function(callback) {
    callback.apply(this);
};

var ClosedStuff = new Class();

ClosedStuff.api(function() {
    console.log(this.add(2, 2));
});

这个东西有效,但有没有办法在没有eval的情况下省略this.?像

ClosedStuff.api(function() {
    console.log(add(2, 2));
});

我不想污染全局命名空间,并且不希望使用任何命名空间前缀。 ES6和特定于节点的解决方案欢迎

1 个答案:

答案 0 :(得分:1)

  

这个东西有用,但有没有办法省略this。没有eval

不是没有用其他东西替换它,例如将实例作为参数传递给回调:

Class.prototype.api = function(callback) {
    callback(this);
};
// ...
ClosedStuff.api(function(inst) {
    console.log(inst.add(2, 2));
});

...这基本上与您使用Function#callthis进行的操作。