我正在尝试在具有子视图实例的View函数中创建一个hashmap,我在View的init方法中执行。但是它给出了一个错误,即视图的init()不存在。我在这里做错了吗?提前谢谢。
view = function() {
var subview;
init = function() {
subview['search'] = new searchSubView();
}
}
check = function() {
console.log("clicked");
var view1= new view();
view1.init();
}
searchSubView = function() {
}
答案 0 :(得分:6)
您已经创建了一个函数并将其分配给一个隐式全局函数,该函数与view
函数或由它创建的实例无关。
您可以通过在构造函数中分配this.init
或将其放在view.prototype
上来分配函数。
所以:
view = function() {
var subview;
// Note: You need code here to initialize `subview`
this.init = function() {
subview['search'] = new searchSubView();
};
};
或(请注意,我已将subview
作为属性):
view = function() {
this.subview = /* ...initialize subview... */;
};
view.prototype.init = function() {
this.subview['search'] = new searchSubView();
};
附注:
在该代码中,你正在成为The Horror of Implicit Globals的牺牲品。你需要声明变量。
JavaScript代码中的压倒性惯例是使用构造函数的初始大写,例如View
而不是view
。
你也依赖automatic semicolon insertion,我不推荐。了解规则并应用它们,尤其是您可以安全地缩小/压缩/压缩代码。