javascript - 从 jQuery.get() 内部调用对象方法

标签 javascript jquery oop get

所以我正在进入模块化 javascript,并且在尝试将 jQuery http 请求合并到我的模块中时遇到了障碍。我真的不知道该怎么调用它,所以如果标题有误导性,我深表歉意。

var object = {
    init: function() {
        this.loadRequest();
    },
    loadRequest: function() {
        $.get('https://myurl.com', function(data) {
            this.parseRequest.bind(this)
        });
    },
    parseRequest: function(data) {
        console.log(data);
    }
};

object.init();

当我尝试此操作时,Chrome 告诉我:

Uncaught TypeError: Cannot read property 'bind' of undefined

所以我想这与我如何将该方法绑定(bind)到我的对象有关,但我似乎不知道如何使其工作。

最佳答案

您对 this 在不同上下文中实际指代的内容存在一些误解。我强烈建议您阅读https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this更好地了解 this 指的是什么,因为它是一个重要的概念。

这是对您的代码的修复。如果您想使用bind()

var object = {
    init: function() {
        this.loadRequest();
    },
    loadRequest: function() {
        $.get('https://myurl.com', this.parseRequest.bind(this));
    },
    parseRequest: function(data) {
        console.log(data);
    }
};

object.init();

JSFiddle:https://jsfiddle.net/rtbbc74m/

另一种常用的方法是var self = this(进一步阅读:How to use the self with object-oriented javascript and closures):

var object = {
    init: function() {
        this.loadRequest();
    },
    loadRequest: function() {
        var self = this;
        $.get('https://myurl.com', function(data) {
            self.parseRequest(data);
        });
    },
    parseRequest: function(data) {
        console.log(data);
    }
};

object.init();

JSFiddle:https://jsfiddle.net/tz680b1c/

关于javascript - 从 jQuery.get() 内部调用对象方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37451022/

相关文章:

javascript - 在窗口调整大小时更改 CSS 会破坏 CSS

java - 不同类型输入消息的设计模式

php - 我正确使用 OOP 了吗?

javascript - 禁用由 CakePHP FormHelper 生成的按钮

javascript - gulp:如何在不刷新的情况下更新浏览器(仅适用于 css 更改)

javascript - 使用 Twitter 的 Bootstrap 发出警报几秒钟后消失

javascript - 如何用Jquery制作动态过渡效果?

javascript - 如何获取AngularJS中ng-repeat选项数组中的子值?

javascript - 从下拉选项中删除 "selected"

python - 是否可以使用变量从特定对象调用方法?