js函数用于多个变量

时间:2016-01-27 21:35:43

标签: javascript

所以,我有两个js变量,我经常使用它们:

var rhpp = jQuery(this).parents('.rhp');
var rhp_id = rhpp.data("pi");

例如:

function my_function_1 (){
   jQuery(document).on('click', '.button_1', function (e) {
      var rhpp_1= jQuery(this).parents('.rhp');
      var rhp_id_1 = rhpp_1.data("pi");   
      //do something
   });
}
function my_function_2 (){
   jQuery(document).on('click', '.button_2', function (e) {
      var rhpp_2 = jQuery(this).parents('.rhp');
      var rhp_id_2 = rhpp_2.data("pi");   
      //do something
   });
}
function my_function_3 (){
   jQuery(document).on('click', '.button_3', function (e) {
      var rhpp_3 = jQuery(this).parents('.rhp');
      var rhp_id_3 = rhpp_3.data("pi");   
      //do something
   });
}

因为它,我想把它变成一个我可以重用的函数:

function RHP_PARENT(a, b) {
    var a = jQuery(this).parents('.rhp');
    var b = a.data("pi");
}

然后,RHP_PARENT("rhpp", "rhp_id");

当然,这是不对的。我不太熟悉如何为变量创建函数。

有人能告诉我吗?

谢谢!

3 个答案:

答案 0 :(得分:3)

你可以创建一个返回这两个值的函数。

function getRhpParent(element) {
  var rhpp = jQuery(element).parents('.rhp');
  return {
    rhpp: rhpp,
    rhpp_id: rhpp.data("pi")
  };
}

// Usage
var temp = getRhpParent(this);
var rhpp = temp.rhpp;
var rhp_id = temp.rhp_id;

答案 1 :(得分:1)

你可以这样做:

function RHP_PARENT(that) {
    var a = jQuery(that).parents('.rhp');
    var b = a.data("pi");
    return { parents: a, data: b };
}

这允许你写:

var rhp_id_1 = RHP_PARENT(this).data;   

答案 2 :(得分:1)

您是否打算在RHP_PARENT之外访问这些变量?

如果是这样,您应该在函数外部实例化ab

您是否打算将ab作为RHP_PARENT的属性进行访问?

在这种情况下,您可能需要执行以下操作:

var RHP_PARENT = {
  'a': (function(){
    jQuery(this).parents('.rhp');
  })(),
  'b': (function(){
    this.a.data("pi");
  })()
}

基于您的问题并不完全清楚您的用例是什么,因此很难制定单一答案。

修改

您似乎更新了问题,这里有两个可行的解决方案。

以下代码将遍历所有具有以“button”开头的类的元素。这解决了同质用例:

$("[class^='button']").each(function(){
   $(this).click(function (e) {
        var rhpp = jQuery(this).parents('.rhp');
        var rhp_id = rhpp.data("pi");   
        //do something
    });
})

以下解决方案解决了更一般的用例,并且更加灵活。这里的优点是获取rhhp和rhp_id的业务逻辑被分解为辅助函数,从而使其更具可重用性。您还可以使用this

引用同一对象中的其他函数
var my_functions = {
  get_rhhp: function(el){
     return jQuery(el).parents('.rhp');
  },
  get_rhp_id: function(rhhp){
     return rhhp.data("pi");   
  },
  "my_function_1": function(){
    jQuery(document).on('click', '.button_1', function (e) {
        var rhhp =  get_rhhp();
        var rhp_id = get_rhp_id(rhhp);
        //do something
    });
  },
  "my_function_2": function(){
    jQuery(document).on('click', '.button_2', function (e) {
        var rhhp =  get_rhhp();
        var rhp_id = get_rhp_id(rhhp);
        //do something
    });
  },
  "my_function_3": function(){
    jQuery(document).on('click', '.button_3', function (e) {
        var rhhp =  get_rhhp();
        var rhp_id = get_rhp_id(rhhp);
        //do something
    });
  }
}