Я экспериментирую с предложением Ecmascript для ShadowRealm и сталкивается с некоторым глубоко неинтуитивным поведением вокруг идентичности объекта, функциональных привязков и прототипа наследования в сферах. PrettyPrint-Override ">const realm = new ShadowRealm();
const fn = realm.evaluate(`
globalThis.shared = { x: 1 };
function getShared() { return shared; }
getShared;
`);
const objFromRealm = fn();
console.log(objFromRealm); // [object Object]
console.log(Object.getPrototypeOf(objFromRealm) === Object.prototype); // false
console.log(objFromRealm instanceof Object); // false
console.log(typeof objFromRealm); // 'object'
< /code>
Вопросы: < /p>
Почему объект возвращается из ShadowRealm, а не экземпляр объекта в основной области? Цепь? Двигатель когда-либо «обернуть» или «прокси» объекты для сохранения безопасности памяти? Я ожидал, что он будет вести себя как обычный объект - например, экземпляр объекта должен вернуть true, а прототип должен соответствовать объекту основного сферы. Прототип. Вместо этого я обнаружил, что объекты из ShadowRealm не распознаются как экземпляры объекта в основной области, а их прототипы цепочки полностью отделены. Это поведение, кажется, нарушает традиционные ожидания относительно идентификации объектов и типа, поэтому я пытаюсь понять, что на самом деле происходит за кулисами, и является ли это за дизайн или побочный эффект изоляции отсека.
Подробнее здесь: https://stackoverflow.com/questions/796 ... nheritance
Как двигатель JavaScript обрабатывает идентичность объекта и прототип наследование между ShadowRealms и основным контекс ⇐ Javascript
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение