Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/451.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript类中设置回调函数_Javascript_Class_Callback - Fatal编程技术网

在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
一起使用时,函数充当构造函数检查此文档,了解和