찾다

 >  Q&A  >  본문

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

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

<code>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});</code>

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

1

2

3

4

5

6

7

8

9

<code> initialize: function () {

        this.collection.on('add', this.addOne, **this**);

        this.render();

    },

 

    render: function () {

        this.collection.each(this.addOne, **this**);

        return this;

    },</code>

PHP中文网PHP中文网2846일 전376

모든 응답(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
  • 취소회신하다