1234567891011121314151617181920212223242526272829 |
- 'use strict';
- /* eslint-disable no-proto -- safe */
- var uncurryThisAccessor = require('../internals/function-uncurry-this-accessor');
- var isObject = require('../internals/is-object');
- var requireObjectCoercible = require('../internals/require-object-coercible');
- var aPossiblePrototype = require('../internals/a-possible-prototype');
- // `Object.setPrototypeOf` method
- // https://tc39.es/ecma262/#sec-object.setprototypeof
- // Works with __proto__ only. Old v8 can't work with null proto objects.
- // eslint-disable-next-line es/no-object-setprototypeof -- safe
- module.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {
- var CORRECT_SETTER = false;
- var test = {};
- var setter;
- try {
- setter = uncurryThisAccessor(Object.prototype, '__proto__', 'set');
- setter(test, []);
- CORRECT_SETTER = test instanceof Array;
- } catch (error) { /* empty */ }
- return function setPrototypeOf(O, proto) {
- requireObjectCoercible(O);
- aPossiblePrototype(proto);
- if (!isObject(O)) return O;
- if (CORRECT_SETTER) setter(O, proto);
- else O.__proto__ = proto;
- return O;
- };
- }() : undefined);
|