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

标签 javascript

我对编写 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/

相关文章:

javascript - 如何在 Apache Tomcat 中运行 React 应用程序?

javascript - Microsoft Fluent Design for Web(CSS 框架)

javascript - 为什么 AngularJS 教程的第 3 步不起作用?

javascript - 如何使用javascript停止拖放中的div重叠

javascript - 将表单数据发送到 Canvas 中的外部 pjs 草图

javascript - 带填充的行高

javascript - Chrome 不模拟手势事件

javascript - 如何基于 AST 转换生成 JavaScript sourcemap?

javascript - 使用 Date.UTC 转换时返回日期时间的正确月份

javascript - dispatchEvent() 函数作为参数,执行函数而不是传递它