如何得到函数作为jquery插件的参数

时间:2018-06-08 08:05:36

标签: jquery

如何更改processBefore函数中someFunc中初始化的数据变量?

jQuery.fn.someFunc = function(options) {
  var data = 1;
  if (typeof options.processBefore == 'function')
    options.processBefore(data);
  console.log(data); // need data after options.processBefore magic
}

$('#some').someFunc({
  processBefore: function() {
    // how to change data variable here???
  }
});

2 个答案:

答案 0 :(得分:1)

要执行此操作,您可以return分配给precessBefore的函数中的新值,并将其分配给插件定义中的data,如下所示:

jQuery.fn.someFunc = function(options) {
  var data = 1;
  options = options || {};
  if (typeof options.processBefore == 'function')
    data = options.processBefore(data);
    
  console.log(data);
}

$('#foo').someFunc({
  processBefore: function(data) {
    // some logic here...
    return data * 5;
  }
});

$('#bar').someFunc();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="foo"></div>
<div id="bar"></div>

另请注意我添加的行,如果在初始化时未提供参数,则会处理为options定义默认对象。

答案 1 :(得分:0)

在您的示例中,

data设置为1,这是一个原语,因此无法进行变异。相反,如果你传递一个对象(可以变异),那应该完美无缺:

jQuery.fn.someFunc = function(options) {
  var data = {a: 1};

  if (typeof options.processBefore == 'function')
    options.processBefore(data);

  console.log(data); // data.a will be 2 here
}

$('#some').someFunc({
  processBefore: function(data) {
    data.a = 2;
  }
});