31 lines
1.2 KiB
JavaScript
31 lines
1.2 KiB
JavaScript
'use strict';
|
|
var DESCRIPTORS = require('../internals/descriptors');
|
|
var defineBuiltInAccessor = require('../internals/define-built-in-accessor');
|
|
var isObject = require('../internals/is-object');
|
|
var isPossiblePrototype = require('../internals/is-possible-prototype');
|
|
var toObject = require('../internals/to-object');
|
|
var requireObjectCoercible = require('../internals/require-object-coercible');
|
|
|
|
// eslint-disable-next-line es/no-object-getprototypeof -- safe
|
|
var getPrototypeOf = Object.getPrototypeOf;
|
|
// eslint-disable-next-line es/no-object-setprototypeof -- safe
|
|
var setPrototypeOf = Object.setPrototypeOf;
|
|
var ObjectPrototype = Object.prototype;
|
|
var PROTO = '__proto__';
|
|
|
|
// `Object.prototype.__proto__` accessor
|
|
// https://tc39.es/ecma262/#sec-object.prototype.__proto__
|
|
if (DESCRIPTORS && getPrototypeOf && setPrototypeOf && !(PROTO in ObjectPrototype)) try {
|
|
defineBuiltInAccessor(ObjectPrototype, PROTO, {
|
|
configurable: true,
|
|
get: function __proto__() {
|
|
return getPrototypeOf(toObject(this));
|
|
},
|
|
set: function __proto__(proto) {
|
|
var O = requireObjectCoercible(this);
|
|
if (isPossiblePrototype(proto) && isObject(O)) {
|
|
setPrototypeOf(O, proto);
|
|
}
|
|
}
|
|
});
|
|
} catch (error) { /* empty */ }
|