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也有同样的行为。