在Javascript中调用实例的函数

时间:2013-12-02 09:02:57

标签: javascript jquery

我正在尝试在具有子视图实例的View函数中创建一个hashmap,我在View的init方法中执行。但是它给出了一个错误,即视图的init()不存在。我在这里做错了吗?提前谢谢。

http://jsfiddle.net/3fR4R/1/

view = function() {
    var subview;
    init = function() {
        subview['search'] = new searchSubView();
    }
}

check = function() {
    console.log("clicked");
    var view1= new view();
    view1.init();
}

searchSubView = function() {    
}

1 个答案:

答案 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();
};

附注:

  1. 在该代码中,你正在成为The Horror of Implicit Globals的牺牲品。你需要声明变量。

  2. JavaScript代码中的压倒性惯例是使用构造函数的初始大写,例如View而不是view

  3. 你也依赖automatic semicolon insertion,我不推荐。了解规则并应用它们,尤其是您可以安全地缩小/压缩/压缩代码。