原谅伪代码,我的实际文件要大得多:/
我想从类中调用一个函数(带参数)。但是,该函数应作为变量传递给类。
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();
}
}
}
那么我如何将itWorked()
传递给班级?
我如何在类中调用itWorked(answer)
函数以及将变量传递给if?
答案 0 :(得分:3)
您需要更改
setCallback = function (c) {callback = c;}
到
this.setCallback = function (c) {callback = c;}
所以setCallback函数将是公共的。
如果您还想要回调范围,可以像这样调用
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");
答案 1 :(得分:1)
删除括号以将该函数作为变量传递。
doIt.setCallback( someObject.itWorked );
然后,您可以像使用任何其他功能一样使用回调。
callback( answer );