>  Q&A  >  본문

javascript - Backbone 里有一个this看不懂,求指教,多谢啦

下面一段简单的代码里有个this看不懂他什么意思,

var NoteCollectionView = Backbone.View.extend({
    tagName: 'ul',

    initialize: function () {
        this.collection.on('add', this.addOne, this);
        this.render();
    },

    render: function () {
        this.collection.each(this.addOne, this);
        return this;
    },

    addOne: function(note) {
        var noteView = new NoteView({model: note});
        this.$el.append(noteView.render().el);
    }
});
var noteCollection = new NoteCollection([note1, note2, note3]);
var noteCollectionView = new NoteCollectionView({collection: noteCollection});

请问下面那两个加粗的this什么作用,代码的作者说是取得上下文的作用,但是没说具体什么意思?
为什么要放两个this取得上下文啊? 多谢~嘿嘿

 initialize: function () {
        this.collection.on('add', this.addOne, **this**);
        this.render();
    },

    render: function () {
        this.collection.each(this.addOne, **this**);
        return this;
    },
PHP中文网PHP中文网2749일 전352

모든 응답(2)나는 대답할 것이다

  • 怪我咯

    怪我咯2017-04-10 16:07:54

    传人一个context参数来修改当前上下文,控制this的指向。

    object.on(event, handler, [context])

    如果你传入context那么当前上下文就是你所传入的context, this也指向它。如果不传入this就指向实例化的对象(根据题主的代码就是collection对象)。

    简单的说他的这种做法其实就是让this指向view对象而不是指向collection对象。

    회신하다
    0
  • 阿神

    阿神2017-04-10 16:07:54

    就是上下文啊,你在绑定事件的时候,是得放入一个上下文环境的(Context),否则你触发这个方法的时候,它怎么知道是谁(哪个对象)调用此方法啊,具体请查看Backbone的Events源码

    회신하다
    0
  • 취소회신하다