Javascript(骨干) - 什么时候是假的空对象?

时间:2015-04-13 21:59:26

标签: javascript backbone.js

我试图在新的Assemble.io项目中重新使用一些示例Javascript代码。我有一个main.js文件,可以创建一个实例'一个骨干视图。视图的初始化函数的第一个参数的值在main.js中确定为布尔值,如下所示:

new MyView(typeof myFunc != "undefined", anotherVar);

在最初的例子中(我在Apache中作为虚拟主机运行)这一切都非常容易理解。在我的新项目(通过grnt-contrib-connect提供的Assemble.io站点)中,如果第一个参数的计算结果为false,则MyView.initialize接收的是一个空对象{}。即使我删除了测试,我也会看到这一点,然后执行此操作:

new MyView(false, anotherVar);

值true(或其他任何内容,如字符串,数组等)按预期传递。

这对某人有意义吗?

1 个答案:

答案 0 :(得分:2)

来自Backbone source

  var View = Backbone.View = function(options) {
    this.cid = _.uniqueId('view');
    options || (options = {});
    _.extend(this, _.pick(options, viewOptions));
    this._ensureElement();
    this.initialize.apply(this, arguments);
  };

如果构造函数的第一个参数求值为false,则在调用initialize之前将其替换为空对象。

编辑:

重新分配options改变arguments对象有点奇怪,但使用以下函数进行测试证实了这一点:

  function checker (options) {
    console.log(arguments);
    options || (options = {});
    console.log(arguments);
  }