我已按如下方式创建了一个对象。
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控制台。
答案 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
确实全局可用 - 请检查错误控制台。