我正在嘗試爲全局瀏覽器窗口對象創建代理。這個想法很簡單 - 如果調用者使用現有的方法或屬性只是返回它,否則使用假對象。下面的代碼:使用JS代理對象時保留'this'上下文
var handler = {
get: function(target, name) {
return name in window ?
window[name] :
target[name];
},
set: function(obj, prop, value) {
if (prop in window) {
window[prop] = value
} else {
obj[prop] = value
};
},
};
var fakeWindow = new Proxy(function() {}, handler);
fakeWindow.foo = 'bar';
console.log(fakeWindow.foo); // outputs 'bar'
fakeWindow.alert('hello'); // error - the alert method is called without the correct this value
問題是,調用代理對象上的方法時(如上面的例子中的警報)中,「這個」值是代理,而不是窗口的那個。 有什麼辦法可以讓這個工作?
返回窗口[名] .bind(窗口) –
只有當它雖然正確的功能? – Dandan