v8エンジンの __proto__ が getter/setter になってた
28.0.1500.3 (Official Build 198635) dev-m
で確認
以前確認した時はまだDataDescriptorだったから、また変更されたみたい。
> Object.getOwnPropertyDescriptor(Object.prototype,"__proto__") Object {get: function, set: function, enumerable: false, configurable: true}
これで、Firefox, Chrome ともに Object.setPrototypeOf を作れる!....と思ったけど。
(function() { var protoSet = Object.getOwnPropertyDescriptor(Object.prototype, "__proto__").set; Object.setPrototypeOf = function setPrototypeOf (aTarget, aProto) { protoSet.call(aTarget, aProto); }; })(); var o = {}; Object.setPrototypeOf(o, { foo: function(){ return "FOO"; } });
すると
TypeError: Generic use of __proto__ accessor not allowed
って例外が発生する。
ぐぬぬ...orz