我正在尝试在同一个类的另一个方法中访问我的类的'render'方法。 但得到了错误
“Uncaught TypeError:Object [object Window]没有方法'render'”
这是我的代码:
function myObject(options) {
this.top_offset = 100;
this.right_offset = 50;
};
myObject.prototype.render = function() {
alert ("render");
};
myObject.prototype.getContent = function(data, params) {
// do something with the data
alert('done');
// !not working here!
this.render();
}
知道我做错了什么吗? 谢谢!
修改
以下示例正在运行,与我的实际代码的区别在于我在异步调用(get)之前实现了对象,并且我的对象的方法被用作回调函数。
// using the object
var o = new myObject('plop');
$.getJSON(url, toSend, function(data) {
}).success(function(e) {
myObject.getContent(e)
};
答案 0 :(得分:1)
<强>更新强> 同时我看到你发布的代码,我发现你已经在匿名函数上调用了你的回调。我想我必须多做一些思考 截至目前,我很难过。
好的,所以你在下面评论了你通过回调呼叫getContent()
的问题。
所以你的代码看起来有点像这样,我假设:
$.post(url, data, myObj.getContent);
了解JavaScript实际上没有方法很重要。它具有函数,函数可以指定为对象的属性,但这并不意味着这些函数将以任何方式“归属”这些对象。
简单地说,函数里面的this
可以指向调用(不是声明)函数“作为方法时点的左边的对象“;或者如果你调用函数“不作为方法”,则使用全局对象(窗口);或者它甚至可以指向某个其他对象任意对象,如果你使用告诉函数绑定或运行它 - 这可以通过使用Function.prototype
:call
中的一些“方法”来完成, apply
,bind
。
您可以通过创建一个匿名函数来解决您的问题,该函数将使用您的对象作为激活对象调用getContent()
,如下所示:
var cb = function(){ myObj.getContent(); }
$.post(url, data, cb);
或通过显式绑定您的对象作为其this
:
$.post(url, data, myObj.getContent.bind(myObj); )
第二种选择更安全,因为如果myObj
变量的值在此代码运行的时间和调用回调的时间之间发生变化,您最终可能会在错误的对象上调用getContent()
答案 1 :(得分:0)
在这里工作:
function myObject(options) {
this.top_offset = 100;
this.right_offset = 50;
};
myObject.prototype.render = function() {
alert ("render");
};
myObject.prototype.getContent = function(data, params) {
// do something with the data
alert('done');
// !not working here!
this.render();
}
var a = new myObject();
a.getContent();
猜猜你没有正确地调用你的对象