gpt4 book ai didi

backbone.js - 这在 Todo.js 中提到的关键字是什么? ( Backbone 教程)

转载 作者:行者123 更新时间:2023-12-04 05:34:43 27 4
gpt4 key购买 nike

我很难理解 Backbone.js 的 Todo.js 教程中的“this”指的是什么。具体来说,在 AppView 内部:

initialize: function() {
this.input = this.$("#new-todo");
this.allCheckbox = this.$("#toggle-all")[0];

Todos.bind('add', this.addOne, this);
Todos.bind('reset', this.addAll, this);
Todos.bind('all', this.render, this);

this.footer = this.$('footer');
this.main = $('#main');
},

因此,当 Todos.bind('add', this.addOne, this) 被调用时,它会将 View (this.addOne) 绑定(bind)到集合 ('add')。如果是这样,我们假设第三个参数(“this”)也引用了 AppView 对象。为什么我们需要将“this”作为第三个参数?

注释源代码: http://backbonejs.org/docs/todos.html

最佳答案

this因为第三个参数是 this调用第二个参数中的函数时要设置的上下文。

这听起来很困惑,所以让我试着分解一下。让我们看看这条线...

Todos.bind('add', this.addOne, this);

如果我们改用这个...
Todos.bind('add', function() { this.$el.text("Hello, world!"); });

...我们根本不需要第三个参数。在这种情况下,该函数被立即调用,它的 this被保留。

但是,因为我们不想内联每个函数,所以我们像这样传递对函数的引用......
Todos.bind('add', this.addOne, this);

这与您的示例相同。当你调用像 this.addOne() 这样的函数时, 它的 this设置为 this它被召唤了。

但是,当您传递一个引用时(不要立即调用它),它的 this上下文丢失,调用时为 window ,这不是你想要的。

为了防止这种情况,第三个参数是 this调用函数时使用的上下文。

在内部,Backbone 将使用 _.bind() 绑定(bind)它。这是原生 bind() 的 polyfill关于函数的方法。

关于backbone.js - 这在 Todo.js 中提到的关键字是什么? ( Backbone 教程),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12101896/

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