【问题标题】:JQUERY and JAVASCRIPT OOPJQUERY 和 JAVASCRIPT OOP
【发布时间】:2016-11-28 03:38:58
【问题描述】:

我有一个jquery函数:

$(document).ready(function(){
$("#expand_label_object").on("click", function(){ 
$(this).toggleClass("col-3");
$(this).toggleClass("col-12"); 
$("#expand_label_info").toggleClass("hidden");
});
});

它只是使用 toggleClass 来给我想要的输出。

我想在很多元素上使用这个函数,问题是使用程序化编程方式我必须为每个我想在其上执行函数的元素编写这个函数。例如:

$(document).ready(function(){
$("#expand_Date_object").on("click", function(){
$(this).toggleClass("col-3");
$(this).toggleClass("col-12");
$("#expand_Date_info").toggleClass("hidden");
});
});

如您所见,唯一改变的是#expand_label_object 和#expand_label_info。

是否有人对我如何在 javascript 中创建一个能够执行此函数的工作的对象有任何建议,然后我可以简单地实例化这个“类”的一个新对象,该对象可以执行任务示例#expand_Date_Object 中提供的新信息。

或者我应该为 jquery 编写一个插件来处理这个问题。 如果有怎么办?

  1. 我可以创建一个对象并制作该对象的原型吗?
  2. 我应该使用构造函数吗?
  3. 如何在原型框架中处理 jquery 库?

【问题讨论】:

  • 显示基本的 html 结构。很有可能只需使用一个事件处理程序和一些类或使用其他属性即可做到这一点
  • 这是一个普遍的问题。请发布标记示例并具体说明您要达到的目标。
  • 不,不要试图在任意问题上抛出 OOP。这里只需要一个以选择器为参数的基本函数声明。

标签: javascript jquery oop plugins prototype


【解决方案1】:

您可以创建一个命名函数,利用Function.prototype.call() 将函数设置this 调用到当前单击的元素,将选择器字符串作为参数传递给函数

$(document).ready(function(){

  function handleClick(selector) { 
    $(this).toggleClass("col-3");
    $(this).toggleClass("col-12"); 
    $(selector).toggleClass("hidden");
  }   

  $("#expand_label_object").on("click", function() { 
    handleClick.call(this, "#expand_label_info")
  });

  $("#expand_Date_object").on("click", function() { 
    handleClick.call(this, "#expand_Date_info")
  });

});

【讨论】:

  • 对“downvote”的原因感到好奇? javascript 在帖子中如何不符合 OP 中描述的要求?
  • 从未见过像你这样的طحان ..最好的问候。
  • @Nitin 您认为答案的哪一部分需要编辑?
  • @Nitin 不需要两个额外的空格来传达方法的细节。您最初“否决”的原因是什么? “根据堆栈规则,除非您对其进行编辑,否则我无法投票赞成您的答案”您能否提供此规则的链接?
  • @Nitin 不认为你投反对票,问你是否投反对票。这是投“downvote”的好理由吗?
【解决方案2】:

您似乎想要一个基于 OOP 范式的优雅代码;如果是这样,您可以利用 ES6 语法:

1。构建抽象 API:

   //- -- JQuery Class

   class $Class{
         constructor(selector,parent){
             this.selector=selector;
             this.parent= parent;
         }
         get element(){
             return (this.parent)?$(this.selector,this.parent):$(this.selector);
          }
         on(event,callback){

              this.element.on(event,callback);
         }

   }

    //Common service (contains static methods)

        class CommonService{

            static toggle1(htmlElement){
                 $(htmlElement).toggleClass("col-3");
                 $(htmlElement).toggleClass("col-12");
                 $("#expand_Date_info").toggleClass("hidden");

             }
         }

2。使用 API:

 var exp_label=new $Class('#expand_label_object');
 exp_label.on('click',function(){ CommonService.toggle1(this)} ) 

  // the same of the other code , it will be : 
 var exp_date=new $Class('#expand_Date_object');
 exp_date.on('click',function(){ CommonService.toggle1(this)} ) 

希望这个 OOP 是您的目标。

【讨论】:

  • 看起来像是为了简单的事情而不必要地膨胀代码
  • 不... Op 是在询问它是否实用,这是浪费精力,使简单的情况变得复杂。 OP 创建了一个 XY 问题
  • 我尊重你的意见.. 然而,谁问似乎对 OOP 有怀旧之情,我应该尊重他的情感。
  • @guest271314:真的真的,别让我哭。 plz ..我喜欢一些编程范式,我把自己放在问题所有者的位置上......太情绪化了..啊啊啊
  • 从我收集到的 cmets 中,oop 并不是最好的方法,
猜你喜欢
  • 2021-08-04
  • 2011-07-25
  • 2013-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-23
  • 1970-01-01
  • 2011-08-23
相关资源
最近更新 更多