构造函数中定义的Javascript数组在原型中未定义

Kik*_*mac 5 javascript

我是编写OO JS的新手,但这让我很难过.所以我设置了新的Call对象,然后定义了我认为是空数组的东西.当我调用AddFieldQueryToArray()时,我得到了

Uncaught TypeError: Cannot call method 'push' of undefined 
Run Code Online (Sandbox Code Playgroud)

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);

    }
Run Code Online (Sandbox Code Playgroud)

Ja͢*_*͢ck 10

您应该this.在构造函数中引用实例属性:

function Call() 
{    
     this.fieldArray = [];
     this.queryArray = [];
}
Run Code Online (Sandbox Code Playgroud)

new Array()有一个[]我上面使用的快捷方式.

如果你使用,var fieldArray = [];你将创建一个局部变量,一旦你的实例被创建就会被销毁,除非你使用这种构造:

function Call()
{
    var fieldArray = [];

    this.AddFieldQuerysToArray = function(field, query) {
        // ...
        fieldArray.push(field);
    }
}
Run Code Online (Sandbox Code Playgroud)

这为每个实例创建了一个闭包,在fieldArray整个实例的生命周期中,该闭包"保持活动".