在javascript类中设置回调函数
请原谅伪代码,我的实际文件要大得多:/ 我想从类内部调用一个函数(带参数)。但是,该函数应作为变量传递给类在javascript类中设置回调函数,javascript,class,callback,Javascript,Class,Callback,请原谅伪代码,我的实际文件要大得多:/ 我想从类内部调用一个函数(带参数)。但是,该函数应作为变量传递给类 someObject = { itWorked:function(answer){ alert(answer); }, plugins:{ somePlugin:function(){ var callback; this.doSomething = doSomething;
someObject = {
itWorked:function(answer){
alert(answer);
},
plugins:{
somePlugin:function(){
var callback;
this.doSomething = doSomething;
function setCallback(c){
callback = c;
}
function doSomething(){
var answer = "hello";
[callback](answer); // how do I call this?
}
}
},
widgets:{
something:function(){
var doIt = new someObject();
doIt.setCallback(someObject.itWorked()); // how do I send this?
doIt.doSomething();
}
}
}
doIt.setCallback( someObject.itWorked );
那么我如何将itWorked()
传递给类呢?
我如何调用类中的
itWorked(answer)
函数,以及如何将变量传递给if?删除括号以将函数作为变量传递
someObject = {
itWorked:function(answer){
alert(answer);
},
plugins:{
somePlugin:function(){
var callback;
this.doSomething = doSomething;
function setCallback(c){
callback = c;
}
function doSomething(){
var answer = "hello";
[callback](answer); // how do I call this?
}
}
},
widgets:{
something:function(){
var doIt = new someObject();
doIt.setCallback(someObject.itWorked()); // how do I send this?
doIt.doSomething();
}
}
}
doIt.setCallback( someObject.itWorked );
然后可以像使用任何其他函数一样使用回调
callback( answer );
你需要改变
setCallback = function (c) {callback = c;}
到
因此setCallback函数将是公共的
如果还想确定回调的范围,可以这样调用它
callback.call(scope, param1, param2);
callback.apply(scope, parameters);
如果不知道有多少个参数,可以这样调用
callback.call(scope, param1, param2);
callback.apply(scope, parameters);
作用域可以是任何对象,如果需要,甚至可以是空的{}
顺便说一句,我非常喜欢您在本例中使用私有变量,这是一个非常好的javascript应用。下面是编写javascript对象的好方法,有助于初始化和可读性
var mynamespace = {};
(function () {
function MyObject(param1, param2) {
this.initialize(param1, param2);
}
MyObject.prototype = {
initialize: function (param1, param2) {
var privateScope = {
param1: param1,
param2: param2,
callback: null
};
this.setCallback = function (c) {
privateScope.callback = c;
}
this.doSomething = function () {
if (privateScope.callback) {
privateScope.callback.call();
}
}
}
}
mynamespace.MyObject = MyObject;
}());
然后使用它
var obj = new mynamespace.MyObject("value1", "value2");
这里的回答很好,我刚刚发布了一个替代实现,但是这个实现没有问题。您还应该检查回调是否存在,并且是一个可执行函数:
if(callback&&typeof(callback)==“function”){}
谢谢:)我在这个级别上有点像js noob,谢谢您的反馈!这是一个很好的开始,这是一个写得很好的javascript。你知道javascript是否有一个_construct()等价物吗?因此,与其调用doIt.setCallback(someObject.itWorked)
在newsomeobject()
stage?@ed209中传递它,函数someObject
是构造函数。与new
一起使用时,函数充当构造函数检查此文档,了解和