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