在我自己的数组方法中使用array.push()会产生错误(JavaScript)?

时间:2016-12-23 16:41:00

标签: javascript arrays

我有这个代码示例:

function s () {
    this.func = [];
    this.func.addF = function (str) {
        this.func.push(str);
    }
}

当我创建该对象的实例时:

var a = new s ();
a.func.addF ("hello");

我收到错误消息:未捕获的TypeError:无法读取属性' push'未定义的

我可以理解this.func在这一点上是未定义的,但我该怎么做才能使这项工作成功。请帮助。

2 个答案:

答案 0 :(得分:6)

this存在问题。在javascript中,this指向绑定上下文或用于调用函数调用的内容。其值取决于函数的调用方式。

function s () {
    var self = this;
     self.func = [];
    self.func.addF = function (str) {
        self.func.push(str);
    }
}

var a = new s ();
a.func.addF("hello"); // Display 'hello'

答案 1 :(得分:5)

您是否尝试将方法添加到内部对象(数组)或外部对象(由s构造的那个)?

如果要将该函数添加到外部对象

function s () {
    this.func = [];
    this.addF = function (str) {
        this.func.push(str);
    }
}

如果要将函数添加到内部(数组)对象

function s () {
    this.func = [];
    this.func.addF = function (str) {
        this.push(str);
    }
}

原因与如何定义this有关。当您调用这样的方法时:

a.func.addF ("hello");

变量this未引用a,它引用a.funca.func没有属性func,但确实有方法push,所以如果你真的打算将函数添加到数组对象本身,那么只需使用this.push }。