我正在查看一些代码(不幸的是作者不在了),我想知道他为什么使用.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'方法中访问它,你会得到同样的东西吗?
答案 0 :(得分:1)
是的,我认为你是对的(我看不到代码在行动)。你仍然需要围绕范围关闭,但在这种情况下,不需要使用call
。
要将一些注释添加到此答案中,this
始终是调用该方法的上下文。因此,如果创建了htmlPlayList
的新实例,并且在该实例上调用了该方法,则this
将是对该实例的引用。