Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.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
基于prototype和jquery构建自定义函数_Jquery_Prototypejs - Fatal编程技术网

基于prototype和jquery构建自定义函数

基于prototype和jquery构建自定义函数,jquery,prototypejs,Jquery,Prototypejs,我使用了Prototype和jquery 有时我必须构建一些自定义函数,对于exmaple,我想创建一个公共搜索类,在prototype中,我可以这样编写: var Searcher=Class.create(); Searcher.prototype={ initilize:function(xxx){}, search:function(url,para){ //here ,I may use some internal method, this._check(url

我使用了Prototype和jquery

有时我必须构建一些自定义函数,对于exmaple,我想创建一个公共搜索类,在prototype中,我可以这样编写:

var Searcher=Class.create();
Searcher.prototype={
  initilize:function(xxx){},
  search:function(url,para){
    //here ,I may use some internal method,
    this._check(url,para)
  }
  _check:function(url,para){}
}
在上面的代码中,在“搜索”方法中,我需要“检查”方法,该方法可能会重复使用。因此,我将代码添加到函数“\u check”中

但是,当我想在jquery中执行相同的操作时,我不知道如何执行:

(function($){
  $.search=function(xxxx){
    //how about if I want to extra some common codes to a method,where to place it?

    //here?
    function _check(xxxx){}
  }

  //or here?
  $._check=function(xxxx) {}
})(JQuery)
在构建自定义util类时,似乎应该首选原型,但我真的很喜欢dom操作方式,如“链操作”、“css”和


大家好吗?

在jQuery中,这是插件函数可能使用的私有实用程序函数的常见模式:

(function($){
  $.search=function(xxxx){
    // You can use _check() here
  };

  function _check(xxxx) {
    // Do the work that _check does
  }
})(jQuery)
(还要注意,
jQuery
中的
j
是小写,而不是大写。)

因为,我通常会更进一步:

(function($){
  $.search=search;

  function search(xxxx){
    // You can use _check() here; if you want to pass on `this`, either
    // do it as an argument or do this:  _check.call(this, xxxx);
  }

  function _check(xxxx) {
    // Do the work that _check does
  }
})(jQuery)
在这两种情况下,
\u check
函数对于插件来说都是完全私有的,因为它的作用域是用于包装插件的匿名函数


旁注:您的原型示例已过时。
Class.create的这种使用风格始于v1.5。自v1.6发布以来(四年前),您可以执行以下操作:

var Searcher=Class.create({
  initialize:function(xxx){},
  search:function(url,para){
    //here ,I may use some internal method,
    this._check(url,para)
  }
  _check:function(url,para){}
});
请注意,我是如何将定义原型方法的对象传递到
类中的。创建
,而不是随后替换原型的。Prototype v1.6及以上版本为您提供了原型上的管道,如果您更换它,您将丢失原型。可能还值得指出的是,您的
\u check
方法不是私有的,任何人都可以调用它。如果您确实希望它是私有的,您可以使用与上面相同的技术:

var Searcher = (function() {
  var rv = Class.create({
    initialize:function(xxx){},
    search:function(url,para){
      //here ,I may use some internal method,
      _check.call(this, url, para)
    }
  });

  function _check(url,para){}

  return rv;
})();

请注意,调用
\u check
的方式会发生变化。如果您希望
\u check
中的含义与在
搜索
中的含义相同,或者您可以将其作为参数传递给jQuery中的
\u check

,这是插件函数可能使用的常用私有实用程序函数模式:

(function($){
  $.search=function(xxxx){
    // You can use _check() here
  };

  function _check(xxxx) {
    // Do the work that _check does
  }
})(jQuery)
(还要注意,
jQuery
中的
j
是小写,而不是大写。)

因为,我通常会更进一步:

(function($){
  $.search=search;

  function search(xxxx){
    // You can use _check() here; if you want to pass on `this`, either
    // do it as an argument or do this:  _check.call(this, xxxx);
  }

  function _check(xxxx) {
    // Do the work that _check does
  }
})(jQuery)
在这两种情况下,
\u check
函数对于插件来说都是完全私有的,因为它的作用域是用于包装插件的匿名函数


旁注:您的原型示例已过时。
Class.create的这种使用风格始于v1.5。自v1.6发布以来(四年前),您可以执行以下操作:

var Searcher=Class.create({
  initialize:function(xxx){},
  search:function(url,para){
    //here ,I may use some internal method,
    this._check(url,para)
  }
  _check:function(url,para){}
});
请注意,我是如何将定义原型方法的对象传递到
类中的。创建
,而不是随后替换原型的。Prototype v1.6及以上版本为您提供了原型上的管道,如果您更换它,您将丢失原型。可能还值得指出的是,您的
\u check
方法不是私有的,任何人都可以调用它。如果您确实希望它是私有的,您可以使用与上面相同的技术:

var Searcher = (function() {
  var rv = Class.create({
    initialize:function(xxx){},
    search:function(url,para){
      //here ,I may use some internal method,
      _check.call(this, url, para)
    }
  });

  function _check(url,para){}

  return rv;
})();

请注意,调用
\u check
的方式会发生变化。如果你想
这个
中的意思与在
搜索中的意思相同,或者你可以把它作为一个参数传递给
\u check

T.J.Crowder…:回答得好!但我仍然有一些问题,例如,在prototype中,当我们使用Class.create()包装一个新类时,它有一个构造函数,然后我们可以稍后调用它。但是在jquery中,如何“新建”类?似乎我可以直接调用$.search(xxx)而不是“var foo=new$.search…”。那么,这是否意味着在构建我们自己的类时prototype会更好,但是当我在类中执行与dom相关的操作时,如果我想使用jquery呢?@hguser:jquery根本不提供任何有关构造函数的帮助。jQuery是一个非常适合使用浏览器的库,但除此之外,它没有做更多的工作。Prototype始终具有双重目的:使其更易于在浏览器中工作,并通过其
对象、其
可枚举
混合、对
函数
对象的各种增强等添加通用语言ish功能。如果您想要类似于Prototype的
对象,您可以在jQuery项目中使用。谢谢,我知道了。这意味着我只能选择其中一个,或者使用某个(你的例子)来代替。顺便说一句,为什么不能在我的评论中加“@”呢?@hguser:好吧,如果你想通过jQuery的模式,你可以在同一个页面中使用Prototype和jQuery。因此,您可以将原型用于类似语言的特性,将jQuery用于DOM。如果是@符号,因为我是答案的所有者,任何评论都会触发对我的通知,因此(从通知的角度来看)没有必要将
@t.j.
放入。实际上花了很多时间和精力来编写代码来检测和删除它。克劳德:回答得好!但我仍然有一些问题,例如,在prototype中,当我们使用Class.create()包装一个新类时,它有一个构造函数,然后我们可以稍后调用它。但是在jquery中,如何“新建”类?似乎我可以直接调用$.search(xxx)而不是“var foo=new$.search…”。那么,这是否意味着在构建我们自己的类时prototype会更好,但是当我在类中执行与dom相关的操作时,如果我想使用jquery呢?@hguser:jquery根本不提供任何有关构造函数的帮助。jQuery是一个非常适合使用浏览器的库,但除此之外,它没有做更多的工作。Prototype始终具有双重目的:使其更易于在浏览器中工作,并通过其
对象、其
可枚举
混合、对
函数
对象的各种增强等添加通用语言ish功能。如果您想要类似于Prototype的
对象,您可以在jQuery项目中使用。谢谢,我知道了。这意味着我只能选择其中一个或使用某个东西(你的e