调用对象中的函数

时间:2012-10-11 15:51:49

标签: javascript

我已按如下方式创建了一个对象。

function StartObj() {
   var events = {
      a: function() {
         alert("hello");
      },
      b = function() {
         lightbox(events.a);
      }
   };

   this.main = function() {
      $("#objId").click(events.b);
   }

}

$(document).ready(function(){
      var _start_obj = new StartObj();
      _start_obj.main();
   });

在另一个档案中,

function lightbox(funcPtr) {
   alert(funcPtr);
}

警报报告funcPtr未定义;也是谷歌Chrome控制台。

3 个答案:

答案 0 :(得分:2)

你确定吗?这对我有用......我刚刚将调用添加到x.b()以启动它

var x = {

a: function() {
   alert("hello");
},

b: function() {
       var that = this;
       mayhem(that.a);
    }

}

function mayhem(funcPtr)
{
   funcPtr();
}

x.b();

答案 1 :(得分:1)

你可能不会按照自己的想法去做。

var that = this;无用,而this无论如何都不是x,而是x.b函数的接收者。

这意味着如果你这样做

x.b();

这是有效的

但如果你这样做

var f = x.b;
f();

这不起作用。

如果你想确保x.b的工作不依赖于函数的接收者,你可以这样做:

var x = function(){
    var x ={
       a: function() {
           alert("hello");
       } 
    };
    x.b = function() {
        mayhem(x.a);
    }
    return x;
}();

另一种方法是使用new运算符创建构造函数并生成x。


关于你编辑:

如果您想要访问main,请执行以下操作:

function StartObj() {
   var events = {
      a: function() {
         alert("hello");
      }
   };

   events.b = function() {
         lightbox(events.a);
   };

   this.main = function() {
      $("#objId").click(events.b);
   }
}

答案 2 :(得分:0)

你搞砸了StartObj构造函数 - 它没有返回带有main方法的对象,main只是一个本地函数。另外,在events.b分配后,你的结束括号太多了。这应该有效:

function StartObj() {
   var events = {
        a: function() {
            alert("hello");
        },
        b: function() {
            lightbox(events.a);
        }
    };

    this.main = function main() {
        $("#objId").click(events.b);
    }   
}

另外,请确保lightbox确实全局可用 - 请检查错误控制台。