首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是什么意思?"this._events而论(this._events = {});“?

是什么意思?"this._events而论(this._events = {});“?
EN

Stack Overflow用户
提问于 2014-04-22 07:13:54
回答 3查看 664关注 0票数 3

我已经开始学习Backbone.js了。目前我的JavaScript技能还不太好。我已经开始检查backbone.js文件,并遇到了一条奇怪的代码行,我无法弄清楚这些代码的用途。代码示例(如果需要更多上下文,请为开发人员手动下载backbone.js并参见第80行):

代码语言:javascript
复制
var Events = Backbone.Events = {

  // Bind an event to a `callback` function. Passing `"all"` will bind
  // the callback to all events fired.
  on: function(name, callback, context) {
    if (!eventsApi(this, 'on', name, [callback, context]) || !callback) return this;
    this._events || (this._events = {});
    var events = this._events[name] || (this._events[name] = []);
    events.push({callback: callback, context: context, ctx: context || this});
    return this;
  },

this._events || (this._events = {});这条线是什么意思?对我来说,_events看起来像一个内部变量,但是(this._events = {})是用于赋值还是比较呢?或者在这种情况下,||是一个完全不同的操作?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-04-22 07:18:10

这是一个使用javascripts "falsy“评估的技巧。它与以下内容相同:

代码语言:javascript
复制
if (this._events) {
    // do nothing, this._events is already defined
} else {
    this._events = {};
}

var events = this._events[name] || (this._events[name] = []);也是如此,它可以被转换为

代码语言:javascript
复制
var events;
if (this._events[name]) {
    events = this._events[name];
} else {
    this._events[name] = [];
    events = this._events[name];
}
票数 5
EN

Stack Overflow用户

发布于 2014-04-22 07:18:32

什么行“this._events连着(this._events ={});”意味着?

逻辑OR执行第一个表达式this._events,如果falsy执行第二个表达式(this._events = {})

本质上,它检查this._events是否是错误的,如果是的话,那么为它分配一个新的空对象。

这样,无论是什么,this._events总是至少是一个空对象,下面的代码将能够在没有问题的情况下执行。

票数 1
EN

Stack Overflow用户

发布于 2014-04-22 07:21:43

这是一种写作的方式

代码语言:javascript
复制
if (!this._events) {
    this._events = {};
}

在我看来,使用这种短手是不好的做法,我认为下面这句话

代码语言:javascript
复制
var events = this._events[name] || (this._events[name] = []);

甚至更糟。混合作业,eventsthis._events[name]的创建是相当短的,但也很难读懂。如果你不知道你在做什么,你可能会以这种方式引入一些微妙的错误。这并不能超过这一切在一条线上的好处。

最终它还是会缩小的。让微型机把所有的东西都放在一条线上。不用自己动手。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23212926

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档