Javascript数组是不确定的...我不知道为什么
问题描述:
我想一个PHP类翻译成JavaScript。我遇到的唯一问题是从数组变量中获取项目。我创建了一个简单的jsfiddle here。我无法弄清楚为什么它不起作用。Javascript数组是不确定的...我不知道为什么
(编辑:我更新了这个代码,以更好地反映我在做什么对不起,我以前的错误)
function tattooEightBall() {
this.subjects = ['a bear', 'a tiger', 'a sailor'];
this.prediction = make_prediction();
var that = this;
function array_random_pick(somearray) {
//return array[array_rand(array)];
var length = somearray.length;
var random = somearray[Math.floor(Math.random()*somearray.length)];
return random;
}
function make_prediction() {
var prediction = array_random_pick(this.subjects);
return prediction;
}
}
var test = tattooEightBall();
document.write(test.prediction);
答
做工精细这里,你是不是简单的调用
classname();
后您定义的功能。
更新
当你拨打电话到* make_prediction *,这不会在范围之内。你是正确的金钱创造一个是变量,用它在* make_prediction *:
var that = this;
this.prediction = make_prediction();
function make_prediction() {
var prediction = ''; //initialize it
prediction = prediction + array_random_pick(that.subjects);
return prediction;
}
这里你可以看到一个工作版本:http://jsfiddle.net/zKcpC/
这实际上是非常复杂的,我相信有人更多的Javascript经验或许能够澄清这种情况。
EDIT2:道格拉斯康乐福用这句话解释了它:
按照惯例,我们做一个私有变量。这用于使 对象可用于私有方法。这是 在ECMAScript的语言规范的错误导致这 不正确地设置于内功能的解决方法。
答
你永远不会调用classname
。似乎工作正常。
答
工作对我来说:
(function classname() {
this.list = [];
this.list[0] = "tiger";
this.list[1] = "lion";
this.list[2] = "bear";
function pickone(somearray) {
var length = somearray.length;
var random = somearray[Math.floor(Math.random()*length)];
return random;
}
var random_item = pickone(this.list);
document.write(random_item);
}());
是你实际调用classname
功能?请注意我包你的代码块:
([your_code]());
答
我不知道你想与您正在使用,所以我做了一些猜测阶级结构究竟做到什么,但是这个代码通过创建一个类名对象有实例数据和pickone
方法:
function classname() {
this.list = [];
this.list[0] = "tiger";
this.list[1] = "lion";
this.list[2] = "bear";
this.pickone = function() {
var length = this.list.length;
var random = this.list[Math.floor(Math.random()*length)];
return random;
}
}
var cls = new classname();
var random = cls.pickone();
你可以用它不断的在这里玩:http://jsfiddle.net/jfriend00/ReL2h/。
答
使之成为像这样的自动执行功能:
(function classname() {
this.list = [];
this.list[0] = "tiger";
this.list[1] = "lion";
this.list[2] = "bear";
function pickone(somearray) {
var length = somearray.length; //<---WHY ISN'T THIS DEFINED??
var random = somearray[Math.floor(Math.random() * length)];
return random;
}
var random_item = pickone(this.list);
document.write(random_item);
})();
答
var test = tattooEightBall();
document.write(test.prediction);
应该是:
var test = new tattooEightBall(); //forgot new keyword to create object
document.write(test.prediction()); // forgot parens to fire method
和:
this.prediction = make_prediction();
应该是:
this.prediction = make_prediction;
哈!对不起,我把代码剥离得太多了,我想它解决了我的问题。 http://jsfiddle.net/YznSE/7/ – emersonthis 2012-03-10 01:10:19
爱默生,所以它仍然不工作:我和我的代码更准确的版本(不工作)修改后的代码?如果你能提供你工作,你拥有的页面,或骗取钱财的确切功能/用法,我们也许能够提供帮助。 – Nathan 2012-03-10 01:13:50
它应该现在在更新的链接。谢谢。 – emersonthis 2012-03-10 01:16:46