| var anObject = require('../internals/an-object'); |
| var aPossiblePrototype = require('../internals/a-possible-prototype'); |
| |
| // `Object.setPrototypeOf` method |
| // https://tc39.github.io/ecma262/#sec-object.setprototypeof |
| // Works with __proto__ only. Old v8 can't work with null proto objects. |
| /* eslint-disable no-proto */ |
| module.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () { |
| var CORRECT_SETTER = false; |
| var test = {}; |
| var setter; |
| try { |
| setter = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set; |
| setter.call(test, []); |
| CORRECT_SETTER = test instanceof Array; |
| } catch (error) { /* empty */ } |
| return function setPrototypeOf(O, proto) { |
| anObject(O); |
| aPossiblePrototype(proto); |
| if (CORRECT_SETTER) setter.call(O, proto); |
| else O.__proto__ = proto; |
| return O; |
| }; |
| }() : undefined); |