我有这个代码示例:
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
在这一点上是未定义的,但我该怎么做才能使这项工作成功。请帮助。
答案 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.func
。 a.func
没有属性func
,但确实有方法push
,所以如果你真的打算将函数添加到数组对象本身,那么只需使用this.push
}。