Javascript 使用名称空间创建新对象

Javascript 使用名称空间创建新对象,javascript,backbone.js,Javascript,Backbone.js,我有一个非常奇怪的问题,就是使用名称空间实例化一个对象 如果我尝试这样做,它将不起作用: this.myView = new this.getApp().Views.SubView({ // it doesn't work initialize: function () { console.log('bouh'); } }); 但是,如果我尝试这样做,它会起作用: this.myView = new (this.getApp().Views).SubView

我有一个非常奇怪的问题,就是使用名称空间实例化一个对象

如果我尝试这样做,它将不起作用:

this.myView = new this.getApp().Views.SubView({ // it doesn't work
     initialize: function () {
        console.log('bouh');
     }
});
但是,如果我尝试这样做,它会起作用:

this.myView = new (this.getApp().Views).SubView({ // it works
     initialize: function () {
        console.log('bouh');
     }
});
您可以在此处看到一个示例:


这种代码以前一直在工作,从上周开始。由于这种新行为,我必须更新我的代码。。那么,这是JS编译器的问题还是我很幸运呢?

这都是关于优先级的问题 处于劣势

this.myView = new this.getApp().Views.SubView({ // Doesn't work ?!
新运算符以构造函数的身份使用此.getApp函数,并且当构造函数尝试访问成员“
\u pages
”时(此处为空),则访问子成员“
app
”将失败

在工作中

 this.myView = new(this.getApp().Views).SubView({
括号给出了
this.getApp().Views
优先于新运算符,因此首先对其求值,然后返回
SubView
,该子视图随后被
new
运算符视为构造函数

可能的解决方法是在变量中获取
this.getApp().Views
的值,如

 var AppViews = this.getApp().Views;
然后直接使用变量

this.myView = new AppViews.SubView({

我理解这种行为,但为什么它现在会这样工作?你是否在不同的浏览器中尝试过它,并得到了相同的行为?我检查了我之前所做的,事实上,我是在放括号。。Firefox、Chrome和IE11也有同样的行为。