0

我创建了一个对象,如下所示。

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 未定义;还有谷歌浏览器控制台。

4

3 回答 3

2

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

var x = {

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

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

}

function mayhem(funcPtr)
{
   funcPtr();
}

x.b();
于 2012-10-11T15:55:59.403 回答
1

你可能没有做你认为你做的事。

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

这意味着如果你这样做

x.b();

这行得通

但如果你这样做

var f = x.b;
f();

这不起作用。

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

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);
   }
}
于 2012-10-11T16:00:02.010 回答
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确实在全球范围内可用 - 检查您的错误控制台。

于 2012-10-11T16:29:00.130 回答