使用javascript将变量推送到现有函数

时间:2014-12-05 18:24:10

标签: javascript jquery function variables push

所以,让我说我有这样的功能

(function($){
   $.fn.test = function(opts){
      var   _object = $(this),
            _opts = $.extend({}, $.fn.test.defaults, opts),
            _callback = _opts.objects[1].callback

      /* some code here */

      _callback() /* calling for a callback */
   }

   $.fn.test.defaults = { 
      /* not that important for now */
   }
})

这是我如何初始化该功能

$('.element').test({ 
   option: 0,   /* not important */
   variable: 1, /* not important */
   objects: [ 
      { 
         "object"   : ".element2",
         "callback" : false
      }, 
      { 
         "object"   : ".element3", /* THIS IS OBJECT № 2 */
         "callback" : function(){ 
            /* >>> {THIS PART} <<< */
            console.log (this)
         }
      },
   ] 

所以在 {THIS PART} 它只返回对象№2的数据,但我希望回调函数在 _object 元素上运行$ .fn.test 所以它会输出 $(&#39; .element&#39;)的数据。我无法对其进行硬编码,而且只能console.log (this) console.log ($('.element'))而不是_callback() /* calling for a callback */ - 因为我正在尝试制作更具动态性的功能。因此,我需要将替换为我的 _object 元素,此时它正在呼叫回调{{1}}。我绝对不能使用替换,因为它不是字符串,但我有一个想法将函数转换为字符串,改变我需要的东西然后转换为函数 - 但这听起来像是不合适的解决方案。

你有什么想法吗?你能提出什么建议?

提前谢谢。

2 个答案:

答案 0 :(得分:1)

我不确定我是否理解正确但如果您想获得$ .fn.test范围,您可以尝试这样的事情:

$.fn.test = function(opts){
  var _object = $(this),
      _opts = $.extend({}, $.fn.test.defaults, opts),
      _callback = _opts.objects[1].callback;

  _callback(this);
}

$('.element').test({ 
   option: 0,
   variable: 1,
   objects: [ 
      { 
         "object": ".element2",
         "callback": false
      }, 
      { 
         "object": ".element3",
         "callback" : function(parentScope){ 
            console.log(parentScope);
         }
      },
   ] 
});

答案 1 :(得分:1)

注意,如果正确解释问题,要求在_object = $(this) thisconsole.log (this)作为_callback返回?

尝试

    (function($){
       $.fn.test = function(opts){
          var _object = $(this),
                _opts = $.extend({}, $.fn.test.defaults, opts),
                _callback = _opts.objects[1].callback;

          /* some code here */
          // call `_object` as `this` at `_callback`
          _callback.call(_object) /* calling for a callback */


       $.fn.test.defaults = { 
          /* not that important for now */
       }
    }
    }(jQuery));

请参阅Function.prototype.call()Function.prototype.apply()Function.prototype.bind()

&#13;
&#13;
    (function($){
       $.fn.test = function(opts){
          var _object = $(this),
                _opts = $.extend({}, $.fn.test.defaults, opts),
                _callback = _opts.objects[1].callback;
    
          /* some code here */
          // call `_object` as `this` at `_callback`
          _callback.call(_object) /* calling for a callback */
    
    
       $.fn.test.defaults = { 
          /* not that important for now */
       }
    }
    }(jQuery));

$('html').test({ 
   objects: [ 
      { 
         "object"   : ".element2",
         "callback" : false
      }, 
      { 
         "object"   : ".element3", /* THIS IS OBJECT № 2 */
         "callback" : function(){ 
            /* >>> {THIS PART} <<< */
            console.log(this);
            $(this).find("body").append(this[0].tagName)
         }
      },
   ]
}) 
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
&#13;
&#13;
&#13;