我有一个类播放列表:
function Playlist() {
this.episodes = [ /*episode list*/ ];
};我想做一个显示每一集的方法:
Playlist.prototype.display = function() {
$('.episodeList').each(function(index) {
$(this).children('title').text(this.episodes[index].title);
});
}问题是,在'.episodesindex‘之前的'this’表示所选的dom对象,而不是我的播放列表。
我该如何解决这个问题?谢谢。
发布于 2012-07-20 16:51:50
Javascript中的一种常见做法是创建一个新变量来存储当前类,因为this变量的内容会随着上下文的变化而变化。考虑一下像这样的事情
function Playlist()
{
var self = this;
this.episodes = [/*episode list*/];
this.display = function()
{
$('.episodeList').each(function(index) {
$(this).children('title').text(self.episodes[index].title);
});
}
};用于Playlist类定义,并调用myPlaylist.display()以显示内容。
发布于 2012-07-20 16:52:36
将函数绑定到您的上下文:
$('.episodeList').each($.proxy(function(index, elem) {
$(elem).children('title').text(this.episodes[index].title);
}, this));有关jQuery.proxy的更多信息
发布于 2012-07-20 17:18:32
如果在dom元素上使用each,则每个元素内this都有对dom元素的引用
例如:
Playlist.prototype.display = function(e)
{
$('.episodeList').each(function(index) {
console.log(this)
});
}console.log打印dom元素,并且它是正确的。现在将控制台日志放在每个日志之外,如下所示:
Playlist.prototype.display = function(e)
{
console.log(this)
$('.episodeList').each(function(index) {
});
}现在,console.log应该输出PlayList函数(您的类)。因此每个作用域中" this“都引用了dom元素,但是Playlist.prototype.display作用域中的this引用了播放列表函数。
解决方案是:
Playlist.prototype.display = function(e)
{
var self = this;
$('.episodeList').each(function(index) {
console.log(self)
console.log(this)
});
} 你需要把"this“从Playlist作用域和属性中带到self变量中,所以现在self已经引用了Playlist。现在你做了每个,所以当前的this在每个都有对dom元素的引用,但是self变量仍然有对Playlist的引用。
https://stackoverflow.com/questions/11575939
复制相似问题