Если я использую строгий режим, следующий код не работает. Он не работает на this.bar = 'foobar'; линия. Почему это так? Как я могу создать свойство объекта в строгом режиме?Невозможно создать свойства объекта в строгом режиме
<html>
<body>
<script>
"use strict";
var foo = (function() {
this.bar = 'foobar';
return this;
}());
alert(foo.bar);
</script>
</body>
</html>
редактировать: Благодаря Джеймс Аллардисом для указывая на проблему. Я ошибочно думал, что функция самоисполнения создает объект, но это не так. Мне нужно было сделать одно из следующих вместо:
"use strict";
var foo = new function() {
this.bar = 'foobar';
};
alert(foo.bar);
или (это один JSLint любит лучше)
"use strict";
var foo = (function() {
var obj = {};
obj.bar = 'foobar';
return obj;
}());
alert(foo.bar);
Должно ли это не ссылаться на анонимную функцию? –
Нет. Если вы запустите это из строгой версии, 'this' будет ссылаться на окно. Значение 'this' зависит от того, как вызывается функция. –
Также стоит прочитать: http://www.nczonline.net/blog/2012/03/13/its-time-to-start-using-javascript-strict-mode/ Поиск заголовка: «Устраняет это принуждение». – anddoutoi