Следующие сценарии журнала false
на консоль. Кто-нибудь знает, почему и какие выгоды он приносит?window.Object! = Object для скрипта greasemonkey
С кратким взглядом на исходный код Greasemonkey я не смог найти ничего, что бы изменило Object
. Также, глядя в Object
, трудно увидеть какие-либо значимые отличия, все функции по-прежнему являются внутренним кодом.
// ==UserScript==
// @name test
// @namespace test
// @include *
// @grant none
// ==/UserScript==
console.log(window.Object == Object)
(проверено на Greasemonkey & Firefox, не уверен насчет Scriptish & Chrome, хотя любые эксперименты приветствуются!).
[Примечание: этот вопрос неродственного к вопросу о {a: 2} != {a: 2}
, пожалуйста, прочитайте сам вопрос, а не только взгляд на титул, прежде чем бросить любые близкие голоса, спасибо!].
Вы не можете просто сравнить объекты, так как они никогда не будут равны (разные ссылки в памяти и т. Д.) [Сравнение объектов в JavaScript] (http://stackoverflow.com/questions/1068834/object-comparison- in-javascript) – Justinas
@ Justinas Я не уверен, что это релевантно, это для класса объектов, а другое для экземпляров. – simonzack
кажется, что 'window' не является глобальным объектом в этом случае, а вместо этого ссылается на оконный объект текущей страницы. Так как два кадра/окна не используют одни и те же классы (одинаковые, но не одинаковые), 'Object' и' window.Object' не являются одинаковыми. Это базовая песочница, так что один кадр/окно не мешает глобальным переменным другого кадра/окна. Представьте себе, что одна страница изменит «Object.prototype», и все окна в вашем браузере получат это изменение. – Thomas