我正在寻找处理双重上下文切换的最佳方法。
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的原始定义。
谢谢!
答案 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 );
};