javascript中的双上下文切换

Double context switching in javascript

本文关键字:上下文切换 javascript      更新时间:2023-09-26

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

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方法中,它现在引用了myObject2。如果我不使用调用,那么我就无法访问myObject2中的数据。

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

谢谢!

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

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 );
};