Javascript数组未定义。。。而我';我不知道为什么
我正在尝试将一个PHP类转换为JavaScript。我唯一遇到的问题是从数组变量中获取项。我创建了一个简单的JSFIDLE。我不明白为什么它不起作用 (编辑:我更新了此代码以更好地反映我正在做的事情。对于以前的错误,我深表歉意。)Javascript数组未定义。。。而我';我不知道为什么,javascript,arrays,Javascript,Arrays,我正在尝试将一个PHP类转换为JavaScript。我唯一遇到的问题是从数组变量中获取项。我创建了一个简单的JSFIDLE。我不明白为什么它不起作用 (编辑:我更新了此代码以更好地反映我正在做的事情。对于以前的错误,我深表歉意。) 在这里很好,你不打电话很简单 classname(); 定义函数之后 更新 当您调用*make_prediction*时,此操作将不在范围内。你是对的,创建了一个变量,在*make_prediction*上使用它: var that = this; this.
在这里很好,你不打电话很简单
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;
}
您可以在此处看到工作版本:
这实际上相当复杂,我相信在Javascript方面有更多经验的人可能能够澄清这种情况
编辑2:Douglas Crockfords用以下文字解释:
按照惯例,我们将该变量设为私有变量。这是用来制作的
私有方法可用的对象。这是一个解决方案
ECMAScript语言规范中的错误导致
内部功能的设置不正确
要查看完整的文章,请转到:在这里可以正常工作,您只需不打电话即可
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;
}
您可以在此处看到工作版本:
这实际上相当复杂,我相信在Javascript方面有更多经验的人可能能够澄清这种情况
编辑2:Douglas Crockfords用以下文字解释:
按照惯例,我们将该变量设为私有变量。这是用来制作的
私有方法可用的对象。这是一个解决方案
ECMAScript语言规范中的错误导致
内部功能的设置不正确
要查看完整的文章,请访问:您从未调用过
classname
。似乎工作正常。您从未调用过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]());
为我工作:
(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
方法的classname对象来工作:
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();
您可以在此处以交互方式使用它:。我不确定您使用的类结构到底想要实现什么,所以我做了一些猜测,但这段代码通过创建一个具有实例数据的classname对象和一个
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();
您可以在此处以交互方式使用它:。它对我来说运行良好:您只是没有调用
classname()
。如果你不打电话,什么也不会发生;) 对我来说很好:你只是没有调用classname()
。如果你不打电话,什么也不会发生;) 将其转换为如下自动执行函数:
(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);
})();
(函数类名称(){
this.list=[];
此.list[0]=“老虎”;
此.list[1]=“lion”;
此.list[2]=“熊”;
函数pickone(somearray){
var length=somearray.length;//将其转换为如下自动执行函数:
(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);
})();
(函数类名称(){
this.list=[];
此.list[0]=“老虎”;
此.list[1]=“lion”;
此.list[2]=“熊”;
函数pickone(somearray){
var length=somearray.length//
应该是:
var test = new tattooEightBall(); //forgot new keyword to create object
document.write(test.prediction()); // forgot parens to fire method
this.prediction = make_prediction;
以及:
应该是:
var test = new tattooEightBall(); //forgot new keyword to create object
document.write(test.prediction()); // forgot parens to fire method
this.prediction = make_prediction;
应该是:
var test = new tattooEightBall(); //forgot new keyword to create object
document.write(test.prediction()); // forgot parens to fire method
this.prediction = make_prediction;
以及:
应该是:
var test = new tattooEightBall(); //forgot new keyword to create object
document.write(test.prediction()); // forgot parens to fire method
this.prediction = make_prediction;
哈!对不起,我把代码精简得太多了,我想它解决了我的问题。我已经用更准确的版本修改了代码(这不起作用):Emerson,所以它仍然不起作用?如果你能提供你正在使用的页面,或者你在fiddle上的确切功能/用法,我们可能会提供帮助。你没有从纹身球返回任何内容。请尝试在函数末尾添加一个return this;.AHA。这使它在JSFIDLE上起作用,但由于某些原因,我无法让我的实际代码运行k、 这里有一个较新的JSFIDLE(我不明白为什么它不能以完全相同的方式工作!)。我得到一个错误,说我的“主题”的“长度”属性数组是未定义的:@Emerson-看看我对构成类的工作JSFIDLE的回答。在我看来,你不明白this
操作符在javascript中是如何工作的。如果你只调用一个普通javascript函数,那么this
在该函数中被设置回窗口
。你要么使用e> fn.应用(此…)
或obj.fn(…)
使此
的值正确设置。在小提琴中,当您调用make_prediction()时
,它会释放此
的值,因此该值在函数内部设置不正确,您会收到一个javascript错误。哈!对不起,我太过简化了代码,我想它解决了我的问题。我已经用更准确的代码版本修改了代码(该版本不起作用):Emerson,所以它仍然不起作用?如果你能提供你正在使用的页面,或者你在fiddle上的确切功能/用法,我们可能会提供帮助。你没有从纹身球返回任何内容。请尝试在函数末尾添加一个return this;.AHA。这使它在JSFIDLE上起作用,但由于某些原因,我无法让我的实际代码运行k、 这里有一个较新的JSFIDLE(我不明白为什么它不能以完全相同的方式工作!)。我收到一个错误,说我的“subjects”数组的“length”属性未定义:@Emerson-看看我对一个正在工作的JSFIDLE的回答,它构成了一个类。在我看来,你好像不明白这个是如何定义的