【发布时间】:2015-03-14 08:06:14
【问题描述】:
代码如下,很简单:
(function() {
"use strict";
// Define our constructor
this.White = function() {
this.version = "1.0.0";
};
}());
// Later
a = new White();
alert(a.version);
在JSBin 中(以及在运行JShint 时),它可以正常工作。 添加"use strict" 后在JSBin 中不起作用。但是,在 Chrome 中运行此脚本时,我会收到以下模糊消息:
未捕获的类型错误:无法设置未定义的属性“白色”
为什么?!
【问题讨论】:
-
因为
use strictthis是undefined,否则它将是全局对象。 -
您的代码期望
this是对全局对象的引用。在您的代码中(在 jsbin 之外),如果外部范围处于“严格”模式,则this将是undefined(因为这就是“严格”模式的工作方式)。 -
@elclanrs 谢谢,这确实有道理!所以我只需要
window.White而不是this.White对吗? -
请注意,JSBin 似乎已在您发布的 sn-p 中没有
"use strict";的情况下保存。 -
@JonathanLonowski 我的错,感谢您指出这一点。将
'use strict';添加到 JSBin 也会破坏它.. 更新标题。
标签: javascript iife