2012-08-23 71 views
0

我正在尋找處理這種雙上下文切換情況的最佳方法。javascript中的雙上下文切換

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的每個方法中,現在都指向myObject2。如果我不使用呼叫,那麼我無法訪問myObject2中的數據。

我想過使用申請,然後通過原始的對象作爲參數,並將其傳遞回來,但我期待的,不需要我改變myObject.each原來defition一個更優雅的解決方案。

謝謝!

+0

此代碼並沒有真正的工作,對不對? 「each」函數應該用'func.call(this,key);''someFunc'回調中的''this'不起作用。 – Pointy

回答

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

所以,簡單。猜猜我想這太難了。謝謝! – William