我对编写 OO JS 很陌生,但这让我很困惑。所以我设置了新的 Call 对象,然后定义了我假设为空数组的内容。当我调用 AddFieldQueryToArray() 时,我得到了
Uncaught TypeError: Cannot call method 'push' of undefined
关于this.fieldArray.push(field)
我真的不知道为什么。我也在构造函数中尝试了 this.fieldArray = fieldArray;
。
function Call()
{
var fieldArray = new Array();
var queryArray = new Array();
}
Call.prototype.AddFieldQuerysToArray = function(field,query)
{
if(field !== 'undefined')
{
this.fieldArray.push(field);
}
this.queryArray.push(query);
}
最佳答案
您应该在构造函数中使用 this.
引用实例属性:
function Call()
{
this.fieldArray = [];
this.queryArray = [];
}
new Array()
有一个快捷方式 []
,我在上面用过。
如果你使用 var fieldArray = [];
你会创建一个局部变量,一旦你的实例被创建,它就会被销毁,除非你使用这种构造:
function Call()
{
var fieldArray = [];
this.AddFieldQuerysToArray = function(field, query) {
// ...
fieldArray.push(field);
}
}
这会为每个实例创建一个闭包,其中 fieldArray
在实例的整个生命周期中都“保持事件状态”。
关于构造函数中定义的 Javascript 数组在原型(prototype)中未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17020381/