- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
所以我在使用这个 p5js 脚本时遇到了一些麻烦。我收到一个 TypeError 消息,说“this.randomGenes 不是一个函数”,但对我来说它看起来像是一个函数......我不明白错误来自哪里。一切都拼写正确,所有分号都在那里,所有括号都关闭了,所有括号也是如此。这个错误对我来说不会很明显。
function DNA(genes) {
this.maxWeight = 25;
this.maxSpeed = 25;
if (genes) {
this.genes = genes;
} else {
this.genes = []; // weight, position, maxspeed, rgba
this.randomGenes();
}
this.randomGenes = function() {
this.genes[0] = random(this.maxWeight);
this.genes[1] = [random(height), random(width)];
this.genes[2] = random(this.maxSpeed);
this.genes[3] = [random(255), random(255), random(255), random(255)];
}
}
最佳答案
您需要创建 DNA 函数的“实例”,以便将 this
绑定(bind)到该对象实例,然后您可以从该实例调用 randomGenes
。如果您只是运行 DNA
函数,this
将被错误绑定(bind),并且不会找到该函数。
function DNA(genes) {
this.maxWeight = 25;
this.maxSpeed = 25;
if (genes) {
this.genes = genes;
} else {
this.genes = []; // weight, position, maxspeed, rgba
this.randomGenes();
}
this.randomGenes = function() {
this.genes[0] = random(this.maxWeight);
this.genes[1] = [random(height), random(width)];
this.genes[2] = random(this.maxSpeed);
this.genes[3] = [random(255), random(255), random(255), random(255)];
}
}
// Make an instance of the DNA object so that `this` gets bound to it
var DNA1 = new DNA("myGenes");
// Now, you can call the function via the instance
// Here, this will cause an error about "random" not being defined, but
// that actually proves that "randomGenes" was invoked.
DNA1.randomGenes();
现在,正如 @qqilihq 在评论中提到的,如果您的实例是在没有传递任何参数的情况下创建的,您将收到错误,因为您试图在将函数分配为方法之前调用该函数。为了纠正这个问题,我们需要更改代码,但同样的更改也应该由于另一个原因而发生......
当您创建函数的新实例时,该函数称为“函数构造函数”,因为您调用它来构造对象实例。由于(通常)对象的所有实例都使用相同的行为(方法),因此我们通常将这些方法添加到所有实例都将从中继承的对象的基础“原型(prototype)”对象中。这样,您只需存储该函数一次,所有实例都会继承它。通过将您的函数移至原型(prototype)中,它在实际创建任何实例之前就已存在于内存中,因此不仅解决了您的问题,而且效率更高。
所以,你的代码确实应该是:
function DNA(genes) {
// Instance properties get created using the "this" keyword
// inside the constructor function
this.maxWeight = 25;
this.maxSpeed = 25;
if (genes) {
this.genes = genes;
} else {
this.genes = []; // weight, position, maxspeed, rgba
this.randomGenes();
}
}
// By adding the function to the prototype of DNA, all instances constructed
// via the DNA constructor function will inherit the method:
DNA.prototype.randomGenes = function() {
this.genes[0] = random(this.maxWeight);
this.genes[1] = [random(height), random(width)];
this.genes[2] = random(this.maxSpeed);
this.genes[3] = [random(255), random(255), random(255), random(255)];
}
// Make an instance of the DNA object so that `this` gets bound to it
var DNA1 = new DNA();
// Now, you can call the function via the instance
// Here, this will cause an error about "random" not being defined, but
// that actually proves that "randomGenes" was invoked.
DNA1.randomGenes();
关于javascript - 'this.randomGenes' 为什么不是一个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42461890/
我正在编写一个简单的确定性随机数生成器,基于 xorshift 。这里的目标不是获得密码安全或统计上完美的(伪)随机数生成器,而是能够跨编程语言获得相同的确定性半随机数序列。 我的 Haskell 程
查看RandomGen#next ,文档说: next :: g -> (Int, g) The next operation returns an Int that is uniformly dis
所以我在使用这个 p5js 脚本时遇到了一些麻烦。我收到一个 TypeError 消息,说“this.randomGenes 不是一个函数”,但对我来说它看起来像是一个函数......我不明白错误来自
似乎在 Haskell 中,split 的行为在很大程度上取决于所选择的(伪)随机数生成器 (PRNG)。通过查看 API 中生成随机数的各种方式,我被 split 吸引了。 假设我们采用相对较新的
这个问题已经有答案了: Return specific type within Haskell (3 个回答) 已关闭 7 年前。 我正在尝试生成一些随机数和新的随机数生成器。我还没有走得太远,但我遇
我是一名优秀的程序员,十分优秀!