Javascript 未捕获类型错误:无法设置未定义的属性
代码如下,非常简单:Javascript 未捕获类型错误:无法设置未定义的属性,javascript,iife,Javascript,Iife,代码如下,非常简单: (function() { "use strict"; // Define our constructor this.White = function() { this.version = "1.0.0"; }; }()); // Later a = new White(); alert(a.version); 在中(以及在运行JShint时),它的工作方式与它应该的一样。添加“使用严格”后,在JSBin中不起作用。然而,在Chrome中运行此
(function() {
"use strict";
// Define our constructor
this.White = function() {
this.version = "1.0.0";
};
}());
// Later
a = new White();
alert(a.version);
在中(以及在运行JShint时),它的工作方式与它应该的一样。添加“使用严格”
后,在JSBin中不起作用。然而,在Chrome中运行此脚本时,我得到了一条模糊的信息:
未捕获的TypeError:无法设置未定义的属性“White”
为什么 使用严格模式将不允许您创建隐式全局变量。this.White是全局提升的,它是隐式创建的。因此,删除它将删除错误,因为
使用严格模式此是未定义的,否则它将是全局对象。您的代码期望this
是对全局对象的引用。在您的代码(jsbin之外)中,如果外部作用域处于“严格”模式,则此
将是未定义的
(因为“严格”模式就是这样工作的)。@elclanrs谢谢,这很有意义!所以我只需要执行window.White
而不是this.White
正确吗?请注意,JSBin似乎在保存时没有使用“use strict”代码>在你发布的代码片段中。@JonathanLonowski我的错,谢谢你指出这一点。添加“使用严格”代码>到JSBin也会破坏它。。更新标题。如果您不想禁用严格模式,您可以简单地将基于浏览器的JS的this.White=…
替换为window.White=…
。