Может кто-нибудь объяснить следующий вывод
var handler = {
get: function(target,key, receiver){
return new Proxy(Reflect.get(target, key, receiver),handler);
},
apply: function(target, thisArg, args){
Reflect.apply(target, thisArg, args);
}
}
var p = new Proxy(window, handler);
p.alert("Alert"); // Throws illegal invocation error
var alias = p.alert;
alias("Alert") // Even this works which is baffling for me
var p = new Proxy(Reflect.get(window, "alert"), handler);
p("Alert"); // works as expected
Первый оператор выдает недопустимую ошибку вызова, а второй — нет. Оба они выглядят одинаково для меня, и я не понимаю, как первый оператор не имеет требуемого контекста this
во время Reflect.apply
alert.call(new Proxy(window, {}), "alert")
. - person Ry-♦   schedule 22.08.2018window
. Явный контекст: как вobj.func
, так и вfunc.call(obj)
контекст будетobj
. - person ibrahim mahrir   schedule 22.08.2018