It seems that V8 C++ code (tester) is not treating Proxy as an object and thus returning the default target instead. The same scenario in pure JavaScript (other) works as expected.
/*
// C++ implementation of tester
static void tester(const FunctionCallbackInfo<Value>& info) {
if (info.Length() > 0) {
info.GetReturnValue().Set(info[0]);
}
}
*/
function other(x) {
return x;
}
{
let a = tester({x: 10});
let b = new tester({x: 10});
let c = tester(new Proxy({}, {get: function(target, name) { return name; }}));
let d = new tester(new Proxy({}, {get: function(target, name) { return name; }}));
print(a.x);
print(b.x);
print(c.x);
print(d.x);
}
{
let a = other({x: 10});
let b = new other({x: 10});
let c = other(new Proxy({}, {get: function(target, name) { return name; }}));
let d = new other(new Proxy({}, {get: function(target, name) { return name; }}));
print(a.x);
print(b.x);
print(c.x);
print(d.x);
}
Output:
10
10
x
undefined
10
10
x
x
via wickund
No comments:
Post a Comment