var pp = new Proxy({ inherited: "yes" }, {});
var child = Object.create(pp);
assert.sameValue(child.inherited, "yes", "forward to target through proxy prototype");
assert.sameValue(child.notthere, undefined, "missing property is undefined");
var tp = new Proxy({}, { get: function (t, k) { return "trapped-" + String(k); } });
var c2 = Object.create(tp);
assert.sameValue(c2.anything, "trapped-anything", "get trap on prototype proxy");
var c3 = Object.create(pp);
c3.inherited = "own";
assert.sameValue(c3.inherited, "own", "own property shadows");
assert.sameValue(c3.hasOwnProperty("inherited"), true, "own property present");
assert.sameValue(child.hasOwnProperty("inherited"), false, "not an own property of child");
assert.sameValue(typeof child.toString, "function", "Object.prototype reachable through proxy");
var base = { x: 1 };
var p1 = new Proxy(base, {});
var mid = Object.create(p1);
var p2 = new Proxy(mid, {});
var top = Object.create(p2);
assert.sameValue(top.x, 1, "nested proxy prototypes");
var rp = { a: 1 };
assert.sameValue(Object.create(rp).a, 1, "plain prototype");