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=…