我试图在新的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(或其他任何内容,如字符串,数组等)按预期传递。
这对某人有意义吗?
答案 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);
}