为什么此代码的作者使用.call方法?当然他可以刚刚访问原型?

时间:2011-06-29 15:54:28

标签: javascript

我正在查看一些代码(不幸的是作者不在了),我想知道他为什么使用.call方法。

hmlPlaylist.prototype.loadVideos = function () {
    var scope = this;

    this.config.scriptUrl = '_HMLPlaylistAjax.aspx?' + Math.random();

    jQuery.ajax({
        type: 'GET',
        url: this.config.scriptUrl,
        success: function (d, t, x) {
            scope.loadVideos_callback.call(scope, d);
        },
        error: function () {
        }
    });
};

hmlPlaylist.prototype.loadVideos_callback = function (data) {
    var jsonData = '';
    var jsonError = false;

    try {
        jsonData = eval("(" + data + ")");
    } catch (jError) {
        jsonError = true;
    }

    if (!jsonError) {

        if (jsonData.playlists.length > 0) {
            this.buildPlaylistList(jsonData.playlists);
        }
        if (jsonData.videos.length > 0) {
            this.buildVideoList(jsonData.videos);
            this.bindVideoNavs();
        }
    }
    else {

        // no json returned, don't do anything
    }
};

显然他似乎用它来传递一个'this'引用loadVideos_callback方法,但为什么呢? 'loadVideos_callback'方法附加到'hmlplaylist'的原型,即'class'。所以,如果你在'loadVideos_callback'方法中访问它,你会得到同样的东西吗?

1 个答案:

答案 0 :(得分:1)

是的,我认为你是对的(我看不到代码在行动)。你仍然需要围绕范围关闭,但在这种情况下,不需要使用call

要将一些注释添加到此答案中,this始终是调用该方法的上下文。因此,如果创建了htmlPlayList的新实例,并且在该实例上调用了该方法,则this将是对该实例的引用。