1

我正在尝试在同一个类的另一个方法中访问我的类的“渲染”方法。但是得到了错误

“未捕获的类型错误:对象 [对象窗口] 没有方法‘渲染’”

这是我的代码:

 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)
    };
4

2 回答 2

1

更新: 同时我看到你发布的代码,我看到你已经在一个匿名函数上调用你的回调。那我想我得再想一想了。
到目前为止,我很困惑。


好的,所以您已经在getContent()通过回调调用的问题下方发表了评论。
所以你的代码看起来有点像这样,我假设:

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

重要的是要了解 JavaScript 并没有真正的方法。它具有功能,并且功能可以作为对象的属性分配,但这并不意味着这些功能将以任何方式“属于”这些对象。

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


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

var cb = function(){ myObj.getContent(); }
$.post(url, data, cb);

或通过显式绑定您的函数以将您的对象作为其运行this

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

第二种选择更安全,因为如果myObj变量的值在这段代码运行和回调被调用之间发生变化,你最终可能会调用getContent()错误的对象。

于 2012-11-02T20:55:13.127 回答
0

在这里工作:

http://jsfiddle.net/NKkzb/

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();​

猜测你没有正确调用你的对象

于 2012-11-02T20:13:31.560 回答