Javascript 在对象内调用函数
我创建了一个对象,如下所示Javascript 在对象内调用函数,javascript,Javascript,我创建了一个对象,如下所示 function StartObj() { var events = { a: function() { alert("hello"); }, b = function() { lightbox(events.a); } }; this.main = function() { $("#objId").click(events.b); } } $
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);
}
警报正在报告功能未定义;还有谷歌chrome控制台。你确定吗?这是我的作品。。。我刚刚添加了对
x.b()
的调用来启动它
var x = {
a: function() {
alert("hello");
},
b: function() {
var that = this;
mayhem(that.a);
}
}
function mayhem(funcPtr)
{
funcPtr();
}
x.b();
你确定吗?这是我的作品。。。我刚刚添加了对
x.b()
的调用来启动它
var x = {
a: function() {
alert("hello");
},
b: function() {
var that = this;
mayhem(that.a);
}
}
function mayhem(funcPtr)
{
funcPtr();
}
x.b();
你可能不会做你认为你会做的事 行
var=this
是无用的,这个
实际上不是x,而是x.b
函数的接收器
这意味着如果你这样做
x.b();
var f = x.b;
f();
这很有效
但如果你这样做了
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);
}
}
你可能不会做你认为你会做的事 行
var=this
是无用的,这个
实际上不是x,而是x.b
函数的接收器
这意味着如果你这样做
x.b();
var f = x.b;
f();
这很有效
但如果你这样做了
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);
}
}
你把你的
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确实是全球可用的-检查错误控制台。您已经搞糟了
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在全球范围内可用-检查您的错误控制台。您如何调用它?这些只是定义。(我认为您的问题可能在于
这个
在b
函数中的含义。)您如何调用它?这些只是定义。(我认为您的问题可能在于这个
在b
函数中的含义。)您能回顾一下我的问题吗?请参见编辑。但是你想提醒什么呢?函数代码或只是“hello”?实际上,我在函数中传递的参数是一个回调函数,当lightbox自身初始化时将调用该函数。我只是用一个函数存根进行检查。@dystroy:您最后一个原型代码不起作用,因为events
是原型的本地代码constructor@Bergi右:复制粘贴太多。。。由于它还不够混乱,可能不相关,我删除了原型版本…你能回顾一下我的问题吗?参见编辑。但是你想提醒什么呢?函数代码或只是“hello”?实际上,我在函数中传递的参数是一个回调函数,当lightbox自身初始化时将调用该函数。我只是用一个函数存根进行检查。@dystroy:您最后一个原型代码不起作用,因为events
是原型的本地代码constructor@Bergi右:复制粘贴太多。。。由于它还不够混乱,可能不相关,我删除了原型版本…我不会马上给x.b打电话。我在初始化一个对象,然后打电话给x.b,我不是马上打电话给x.b。我正在初始化一个对象,然后打电话。谢谢你的回复,伙计。我把右括号放好了。但是粘贴到这里时,我弄错了。嘿。谢谢你的回复,伙计。我把右括号放好了。但是当粘贴到这里时,我犯了一个错误