IIFE中的p5,Uncaught TypeError:无法读取属性' className'未定义的

时间:2017-04-27 18:01:51

标签: javascript iife p5.js

我试图在IIFE中运行p5,但收到此错误:

未捕获的TypeError:无法读取属性' className'未定义的

如果没有IIFE,它就不会出现。

sketch.js

var sketch = (function(p5) {
  setup = function() {
    p5.createCanvas(p5.windowWidth, p5.windowHeight);
    p5.background(0);
  };
}(new p5(sketch, "canvas")));

的index.html

<head>
 <meta http-equiv="content-type" content="text/html; charset=utf-8" />
 <link rel="stylesheet" type="text/css" href="style.css" />
 <script src="http://cdnjs.cloudflare.com/ajax/libs/p5.js/0.4.23/p5.js"></script>
</head>
<body>
  <script language="javascript" type="text/javascript" src="main.js"></script>
  <div id = "canvas"></div>
</body>
</html>

1 个答案:

答案 0 :(得分:1)

你的语法有点奇怪。为什么要在括号中包含函数和对new p5()的调用?此外,您缺少setup()函数定义的变量名称。

纠正所有这些看起来像这样:

var sketch = function(p5) {
  p5.setup = function() {
    p5.createCanvas(p5.windowWidth, p5.windowHeight);
    p5.background(0);
  };
}
new p5(sketch, "canvas");

我也不会使用p5作为变量或参数名称,因为这是整个p5.js库的名称,所以我会这样做:

var s = function(sketch) {
  sketch.setup = function() {
    sketch.createCanvas(sketch.windowWidth, sketch.windowHeight);
    sketch.background(0);
  };
}
new p5(s, "canvas");

可以在the p5.js GitHub wiki找到更多信息。