在javascript中双重上下文切换

时间:2012-08-23 17:41:15

标签: javascript prototype

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

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中,我使用call来改变上下文,这样我就可以访问myObject2的数据了。但是,正因如此,在myObject的每个方法中,现在引用myObject2。如果我不使用调用,那么我无法访问myObject2中的数据。

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

谢谢!

1 个答案:

答案 0 :(得分: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 );
};