2015-11-13 5 views
2

В браузере, я попытался оценить следующий фрагмент кода:В браузере назначить новое значение объекту «window» не работает?

window = 1; console.log(window) 

Значение печатается в консоли по-прежнему оригинальный объект окна вместо номера 1.

У кого-нибудь есть идеи по поводу того, почему объект window не может быть переназначен? Является ли это признаком языка Javascript? Могу ли я сделать свой собственный объект недоступным для записи, например, для оконного объекта?

+2

Потому что это по определению не доступен для записи. –

+0

@StephanBijzitter Это делается на уровне языка? или на уровне окружающей среды? Могу ли я сделать свой собственный объект недоступным для записи, например, «оконным» объектом? –

+0

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty – epascarello

ответ

1

specification says:

атрибуты В window, frames и self IDL должен все вернуть WindowProxy объект, просматривающие для Context в Window объекта.

«должен» здесь это означает, что независимо от того, что вы делаете, каждый запрос к window приведет к объекту WindowProxy.

2

Нельзя перезаписать, поскольку он определен как незаписываемый.

Это особенность JS (хотя объект window, вероятно, реализован на более низком уровне).

var example = {}; 
 
Object.defineProperty(example, "foo", { 
 
    value: "Hello", 
 
    writable: false 
 
}); 
 

 
document.body.appendChild(document.createTextNode(example.foo)); 
 
example.foo = "World"; 
 
document.body.appendChild(document.createTextNode(example.foo));

+0

Это не функция JS, а DOM API. – bfontaine

+0

@bfontaine - API DOM определяет требование, чтобы он был только для чтения. Язык JavaScript выполняет это требование. – Quentin

+0

Правильно, я читал слишком быстро :) – bfontaine

Смежные вопросы