D3.js:未捕获TypeError:无法读取未定义

时间:2016-02-22 17:42:08

标签: javascript d3.js initialization undefined

d3.js启动时我遇到了一个非常奇怪的问题。在d3.js脚本中,它一开始就尝试获取var d3_document = this.document;,但会弹出以下错误:

Uncaught TypeError: Cannot read property 'document' of undefined

调试时,this.document返回undefined。

我正在使用yo webapp来生成项目。它使用bower作为包管理器和gulp用于构建过程(使用babel作为ES2015功能)。

有趣的是我用xampp测试了它并且工作正常!

我很感激一些建议!Thnx!

1 个答案:

答案 0 :(得分:12)

听起来像是(Babel,很可能)在D3脚本文件的开头插入"use strict";或将其组合到另一个顶部带有“use strict”的文件中。这意味着this在全局范围内(或在没有特定this的情况下调用的函数)不再是对全局对象的引用,它是undefined。 (在“松散”模式或在没有特定this值的函数中,this在全局范围内是对全局对象的引用,也可以通过全局变量`window1访问。

您需要从Babel转换的脚本列表中删除d3.js,并按原样包含它。假设您正在使用普通的d3.js文件,它看起来像这样:

!function() {
  var d3 = {
    version: "3.5.16"
  };
  var d3_arraySlice = [].slice, d3_array = function(list) {
    return d3_arraySlice.call(list);
  };
  var d3_document = this.document;
  // ...
  // ...
  // ...lots of stuff here...
  // ...
  // ...
}();

这依赖于以松散模式运行。