基于prototype和jquery构建自定义函数
我使用了Prototype和jquery 有时我必须构建一些自定义函数,对于exmaple,我想创建一个公共搜索类,在prototype中,我可以这样编写:基于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
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 checkT.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