Javascript不能从同一个类调用cross方法

Javascript不能从同一个类调用cross方法,javascript,oop,object,Javascript,Oop,Object,我正在尝试访问我的类的“render”方法,在同一类的另一个方法中。 但是我犯了错误 “未捕获的TypeError:对象[Object Window]没有“render”方法” 这是我的密码: function myObject(options) { this.top_offset = 100; this.right_offset = 50; }; myObject.prototype.render = function() { alert ("render"); }

我正在尝试访问我的类的“render”方法,在同一类的另一个方法中。 但是我犯了错误

“未捕获的TypeError:对象[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)
    };
在这里工作:

猜测您没有正确调用对象

在这里起作用:

猜测您没有正确调用对象

更新: 同时,我看到了您发布的代码,并且我看到您已经在对匿名函数调用回调。那么,我想我得多想想。
到现在为止,我都被难住了


好的,您已经在下面评论了您通过回调调用的
getContent()

所以您的代码看起来有点像这样,我假设:

$.post(url, data, myObj.getContent);
了解JavaScript并没有真正的方法是很重要的。它有函数,函数可以指定为对象的属性,但这并不意味着这些函数将以任何方式“属于”这些对象

简单地说,函数内部的
this
可以在调用(而不是声明)函数“作为方法”时指向点左侧的对象;或全局对象(窗口),如果调用函数“不作为方法”;或者,如果您使用告诉函数绑定或运行到它,它甚至可以指向其他对象任意对象——这可以通过使用
函数中的一些“方法”来完成。prototype
调用
应用
绑定


您可以通过创建一个匿名函数来解决问题,该函数将调用对象作为激活对象的
getContent()
,如下所示:

var cb = function(){ myObj.getContent(); }
$.post(url, data, cb);
或者通过显式绑定要运行的函数,将对象作为其
this

$.post(url, data, myObj.getContent.bind(myObj); )
第二种选择更安全,因为如果
myObj
变量的值在该代码运行和调用回调之间发生变化,则可能会在错误的对象上调用
getContent()

更新: 同时,我看到了您发布的代码,并且我看到您已经在对匿名函数调用回调。那么,我想我得多想想。
到现在为止,我都被难住了


好的,您已经在下面评论了您通过回调调用的
getContent()

所以您的代码看起来有点像这样,我假设:

$.post(url, data, myObj.getContent);
了解JavaScript并没有真正的方法是很重要的。它有函数,函数可以指定为对象的属性,但这并不意味着这些函数将以任何方式“属于”这些对象

简单地说,函数内部的
this
可以在调用(而不是声明)函数“作为方法”时指向点左侧的对象;或全局对象(窗口),如果调用函数“不作为方法”;或者,如果您使用告诉函数绑定或运行到它,它甚至可以指向其他对象任意对象——这可以通过使用
函数中的一些“方法”来完成。prototype
调用
应用
绑定


您可以通过创建一个匿名函数来解决问题,该函数将调用对象作为激活对象的
getContent()
,如下所示:

var cb = function(){ myObj.getContent(); }
$.post(url, data, cb);
或者通过显式绑定要运行的函数,将对象作为其
this

$.post(url, data, myObj.getContent.bind(myObj); )

第二种方法更安全,因为如果
myObj
变量的值在该代码运行和调用回调之间发生变化,则可能会在错误的对象上调用
getContent()

在实例化
myObject
时没有使用
new
操作符,而
指向窗口对象,而不是
myObject
对象@jbabey:如果这是问题所在,那么
getContent
是如何运行的?您需要向我们展示完整的代码,包括如何实例化对象以及如何调用
getContent()
@Zecc我正在异步调用(get)之前实例化对象,函数getContent用作my Get的回调。当实例化
myObject
时,您没有使用
new
操作符,并且
指向窗口对象,而不是
myObject
对象@jbabey:如果这是问题所在,那么
getContent
是如何运行的?您需要向我们展示完整的代码,包括如何实例化对象以及如何调用
getContent()
@Zecc我正在异步调用(get)之前实例化对象,函数getContent被用作我的getContent的回调函数我很高兴你的代码可以工作,但我仍然不确定你发布的代码为什么不能工作。哦,好吧,我有更好的事情要考虑:)很高兴我能帮上忙。我很高兴你的代码能正常工作,但我仍然不确定你发布的代码为什么不能正常工作。哦,好吧,我有更好的事情要考虑:)很高兴我能帮上忙。