从命名空间

时间:2018-03-19 14:45:41

标签: jquery

如果我有一个像这样的jquery命名空间:

 var sc = {
          calcResult: function(){
                 //do stuff
                },
           initialise: function () {
              $('#myid').click(function(){
               //would like to call calcResult() here
              }
           }

如何在初始化函数中调用calcResult?我尝试了this.calcResult()sc.calcResult(),但都抱怨未定义的错误。

2 个答案:

答案 0 :(得分:1)

您是否也在某处调用"replica:0"绑定sc.initialise()事件处理程序?在下面的代码段中,它适用于click



sc.calcResult()

var sc = {
  calcResult: function() {
    //do stuff
    alert("Do stuff");
  },
  initialise: function() {
    $('#myid').click(function() {
      //would like to call calcResult() here
      sc.calcResult();
    });
  }
}

sc.initialise();




答案 1 :(得分:1)

sc对象看起来像一个独立的对象(calcResult属于该特定对象,而不属于某些特定的构造函数原型)。因此,您需要指向sc对象本身,以便可以使用calcResult(函数)属性。然后,您有两个选择:

initialise函数范围:

中创建对相应对象的引用
initialise: function () {
    var that = this;
    $('#myid').click(function(){
        // "that" variable points to the right reference
        // the object that sc points to
        that.calcResult()
    });
}

您也可以直接使用sc变量

var sc = {
    calcResult: function(){
    },
    initialise: function () {
        $('#myid').click(function(){
            sc.calcResult()
        });
    }
};

但是,根据您尝试实现的目标,您可能更喜欢一种解决方案而不是另一种解决方案。

如果你有像sc这样的类似对象具有与直接属性相同的功能,你应该创建一个构造函数,以便属性函数属于构造函数原型,而不是将每个函数复制到每个特定的“实例”对象上。