0

我正在寻找处理这种双重上下文切换的最佳方法。

function myObject() {
    this.data = {};
}

myObject.prototype.each = function(func) {
    if (func) {
        for (var key in this.data) {
            func(key);
        }
    }
}

function myObject2() {
    this.data = {};
}

myObject2.prototype.someFunc = function(o) {
    // o = myObject
    o.each.call(this, function(key) {
        this.data[key] *= o.data[key];
    });
}

在 myObject2.someFunc 中,我使用调用来更改上下文,以便可以访问 myObject2 的数据。然而,正因为如此,在 myObject 的 each 方法中,this 现在指的是 myObject2。如果我不使用调用,那么我无法访问 myObject2 中的数据。

我考虑过使用 apply,然后将原始对象作为参数传递并将其传回,但我正在寻找一种更优雅的解决方案,它不需要我更改 myObject.each 的原始定义。

谢谢!

4

1 回答 1

1

看起来它应该是一个通用函数:

function each( obj, func, ctx ) {

    if( func ) {
        for ( var key in obj ) {
            func.call( ctx || null, key, obj[key] );
        }
    }

}

myObject2.prototype.someFunc = function(o) {
    each( o.data, function( key, value ) {
        this.data[key] = value;
    }, this );
};
于 2012-08-23T17:44:52.623 回答