javascript - p5.js 实例模式下的依赖,不传递实例
问题描述
根据我收集到的信息,不鼓励在 p5 中使用全局模式,因为它会污染全局命名空间。我使用实例模式已经有一段时间了,但是创建依赖项总是令人沮丧。为了使用 p5 函数,我在其他文件中的所有函数都必须将整个 p5 实例传递给它们。如果我要在一个项目中创建一堆实体,我会浪费一大堆资源,因为它们每个都包含整个 p5 库。有没有更好的方法来解决这个问题?
解决方案
据我了解,您不必将 p5 实例“传递”到其他文件中的函数中。p5 实例应该被声明为全局的。这不应该比全局模式使用更多的资源。
因此,我们不再将所有 p5 函数附加到全局window
对象(全局模式),而是将它们全部附加到全局 p5 实例对象(实例模式)。这只是命名空间的问题。
考虑下面的示例,它是p5 网站上示例的修改版本:
//sketch.js
let sketch = function(p) {
let x = 100;
let y = 100;
p.setup = function() {
p.createCanvas(700, 410);
p.background(0);
};
p.draw = function() {
p.fill(255);
p.rect(x, y, 50, 50);
};
};
var myp5 = new p5(sketch);
您可以在其他文件中操作全局myp5
实例。例如,在您的other.js
:
//other.js
function randomBackgroundColor() {
myp5.background(myp5.random(0, 255));
}
setInterval(randomBackgroundColor, 1000); //change background color every 1000 milliseconds
在您的 html 文件中包含这两个 js 文件(首先是 sketch.js)会导致画布具有不断变化的背景和一个矩形。
推荐阅读
- android - Android Room 不显示存储的数据
- c# - 将 int 转换为加扰的 Guid 并返回
- python - 将curve_fit或polyfit限制为单调函数
- javascript - Laravel 5.6,如何从一个函数返回两个视图
- excel - 通过单击下拉列表将不同工作表中的数据填充到另一个工作表
- linux - 在后台运行 strace
- objective-c - 从 Objective-C 桥接到 swift 时,swift 编译器如何识别变量是复制的还是强的?
- cakephp - CakePHP 升级 3.3.16 > 3.6.7 后“_cake_model_”缓存配置不存在
- python - 阿伦森的序列
- javascript - 如何使用js在jsp页面加载时调用servlet页面