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

And*_*lli -2 javascript arrays

我有这个代码示例:

function s () {
    this.func = [];
    this.func.addF = function (str) {
        this.func.push(str);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

var a = new s ();
a.func.addF ("hello");
Run Code Online (Sandbox Code Playgroud)

我得到一个错误说:未捕获的TypeError:无法读取未定义的属性'push'.

我可以理解那时this.func尚未定义,但我该怎么做才能使这项工作成功.请帮忙.

Abh*_*dha 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'
Run Code Online (Sandbox Code Playgroud)


PMV*_*PMV 5

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

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

function s () {
    this.func = [];
    this.addF = function (str) {
        this.func.push(str);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

function s () {
    this.func = [];
    this.func.addF = function (str) {
        this.push(str);
    }
}
Run Code Online (Sandbox Code Playgroud)

原因与this定义方式有关.当您调用这样的方法时:

a.func.addF ("hello");
Run Code Online (Sandbox Code Playgroud)

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