gpt4 book ai didi

javascript - 主干 'this' 被设置为 'window'

转载 作者:行者123 更新时间:2023-12-03 08:38:01 25 4
gpt4 key购买 nike

我正在尝试创建一个 Backbone View 对象。在我的初始化代码中,我设置了 var self = this.我收到“self.set 不是函数”错误。这是因为,查看调试器,当我声明 var self 时, this 指的是“窗口”。我以前没见过这个。

谁能告诉我为什么为“这个”选择窗口

代码:

var SongObjectView = Backbone.View.extend({
defaults:{
el:'#playList',
template:''
},
initialize:function(){
var self = this;
self.set({
el:'#playList'
});
alert('initializing songObjectView template');
self.template = _.template($('#songObjectView').html());
self.render();
},
render:function(){
$(this.el).append(this.template);
}
});

最佳答案

View 对象中没有 set 方法,也许您想要 setElement

如果您碰巧发现 thiswindow 对象,很可能是因为您丢失了上下文。正如其他人指出的那样,没有理由进行 self 变量赋值。您可以使用_.bind , _.bindAll以及传递和设置上下文的其他方法。

我尝试清理您的示例,希望这有帮助:

var SongModel = Backbone.Model.extend({
defaults: {
artist: '',
title: ''
}
});

var SongView = Backbone.View.extend({
template: _.template('Title: <%=title%><br>by <em><%=artist%></em>'),
initialize:function(){
this.render();
},
render:function(){
this.$el.append( this.template(this.model.toJSON() ) );
return this;
}
});

var song = new SongModel({
title: "A Hard Day's Night",
artist: "The Beatles"
});

var songView = new SongView({ el: '#playlist', model: song });
<script src='http://code.jquery.com/jquery.js'></script>
<script src='http://underscorejs.org/underscore.js'></script>
<script src='http://backbonejs.org/backbone.js'></script>
<div id="playlist"></div>

关于javascript - 主干 'this' 被设置为 'window',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33136912/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com