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

时间:2014-12-05 05:32:38

标签: javascript oop

我是在JavaScript中创建对象的新手。我需要制作一个不经常重复的随机数生成器(我没有尝试在下面的代码片段中实现该部分)。如何从n中的RNG(n)功能访问RNG.prototype.rand?它现在在我的编辑器中显示为无法访问我的方式。我也不确定是否应该从RNGRNG...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);
  }
}

2 个答案:

答案 0 :(得分:3)

在您的代码中,您需要this.n而不是n。与某些语言不同,不假设“这个”。

要回答你的另一个问题,你在这里设置它的方式,你想从rand返回,虽然坦率地说我不明白你为什么不把n作为rand()的参数,而不是使用构造函数和诸如此类的有状态对象。

答案 1 :(得分:2)

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