JavaScript 中的自定义随机数生成器

Custom random number generator in JavaScript

本文关键字:随机数生成器 自定义 JavaScript      更新时间:2023-09-26

我是用JavaScript创建对象的新手。我需要制作一个不会经常重复的随机数生成器(我没有尝试在下面的代码片段中实现该部分)。如何从RNG.prototype.rand中的函数RNG(n)访问n?它在我的编辑器中显示为无法访问,就像我现在写它的方式一样。我也不确定我应该从RNG还是RNG...rand()回来:

function RNG(n) {
  this.n = n;  
}
RNG.prototype.rand = function() {
  var arr = [];
  var num = Math.floor(Math.rand()*n);
  //keep array of generated numbers
  if(num < arr[0]){
    arr.unshift(num);
  }
  else{
    arr.push(num);
  }
}

在你的代码中,你想要this.n而不是n。与某些语言不同,"这个"不是假设的。

为了回答你的另一个问题,你在这里设置它的方式,你想从rand回来,尽管坦率地说,我不明白你为什么不把n作为rand()的参数,而不是制作一个有状态的对象带有构造函数等等。

this.n 是在实例化实例时创建的实例属性:

function RNG(n) {
    this.n = n;  
}
var rng = new RNG(5);
console.log(rng.n); // 5

RNG.prototype.rand是一个实例方法。在该方法中,如果要引用实例本身,也应使用 this

function RNG(n) {
    this.n = n;  
}
RNG.prototype.method = function() {
    console.log(this.n);
};
var rng = new RNG(7);
rng.method(); // 7, within this method `this` is `rng`, so `this.n` gives you `rng.n`

如果您尝试以下代码:

function RNG(n) {
    this.n = n;  
}
RNG.prototype.method = function() {
    var n = 3;
    console.log(n, this.n);
};
var rng = new RNG(7);
rng.method(); // 3, 7

这里没有this.n实际上是在尝试得到一个用var n = 3;定义的变量。它与实例属性无关rng.n

最后,如果您不定义n

function RNG(n) {
    this.n = n;  
}
RNG.prototype.method = function() {
    console.log(n);
};
var rng = new RNG(7);
rng.method(); // ReferenceError: n is not defined