Javascript Can';不能在严格模式下创建对象属性

Javascript Can';不能在严格模式下创建对象属性,javascript,mode,strict,Javascript,Mode,Strict,如果我使用严格模式,下面的代码将不起作用。它在this.bar='foobar'上失败;线路。为什么会这样?如何在严格模式下创建对象属性 <html> <body> <script> "use strict"; var foo = (function () { this.bar = 'foobar'; return this; }()); alert(foo.bar); </script> </body> </ht

如果我使用严格模式,下面的代码将不起作用。它在this.bar='foobar'上失败;线路。为什么会这样?如何在严格模式下创建对象属性

<html>
<body>
<script>
"use strict";
var foo = (function () {
    this.bar = 'foobar';
    return this;
}());
alert(foo.bar);
</script>
</body>
</html>
或者(这一个JSLint更喜欢)


在严格模式下,
将不引用窗口。在您的示例中,删除strict mode指令将导致
引用窗口

因为在严格模式下,
这个
在您的示例中是
未定义的
,所以您会得到一个错误。这是因为您无法对未定义的内容设置属性

来自(强调与您的情况相关的部分):

首先,在严格模式下传递给函数的值不是 被装进一个物体里。对于正常功能,这始终是一个对象: 所提供的对象(如果使用此值的对象调用);价值,, 已装箱,如果使用布尔值、字符串或此数字调用;或全球 对象,如果使用未定义或null调用此。。。 自动装箱是一种性能成本,但在浏览器中公开全局对象是一种安全隐患,因为全局对象提供对“安全”JavaScript环境必须限制的功能的访问。因此,对于严格模式功能,指定的模式保持不变


这不应该指匿名函数吗?不。如果您在严格模式下运行该函数,则此将指窗口。
的值取决于函数的调用方式。也值得一读:搜索标题:“消除此强制”。
"use strict";
var foo = new function () {
    this.bar = 'foobar';
};
alert(foo.bar);
"use strict";
var foo = (function () {
    var obj = {};
    obj.bar = 'foobar';
    return obj;
}());
alert(foo.bar);