You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
25 lines
906 B
25 lines
906 B
// Works with __proto__ only. Old v8 can't work with null proto objects. |
|
/* eslint-disable no-proto */ |
|
var isObject = require('./_is-object'); |
|
var anObject = require('./_an-object'); |
|
var check = function (O, proto) { |
|
anObject(O); |
|
if (!isObject(proto) && proto !== null) throw TypeError(proto + ": can't set as prototype!"); |
|
}; |
|
module.exports = { |
|
set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line |
|
function (test, buggy, set) { |
|
try { |
|
set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2); |
|
set(test, []); |
|
buggy = !(test instanceof Array); |
|
} catch (e) { buggy = true; } |
|
return function setPrototypeOf(O, proto) { |
|
check(O, proto); |
|
if (buggy) O.__proto__ = proto; |
|
else set(O, proto); |
|
return O; |
|
}; |
|
}({}, false) : undefined), |
|
check: check |
|
};
|
|
|