这有点棘手。我想在传递的回调中改变全局范围
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和特定于节点的解决方案欢迎
答案 0 :(得分:1)
这个东西有用,但有没有办法省略
this
。没有eval
?
不是没有用其他东西替换它,例如将实例作为参数传递给回调:
Class.prototype.api = function(callback) {
callback(this);
};
// ...
ClosedStuff.api(function(inst) {
console.log(inst.add(2, 2));
});
...这基本上与您使用Function#call
和this
进行的操作。