我想知道如何附加一个可用于页面上每个对象的函数。我知道我可以这样做:
mything = {
init: function(SELECTOR){
},
destroy: function(){
}
};
但是我只能这样:mything.init(SELECTOR);
我想要的是能够以这种方式做同样的事情:
$('.mydiv, input, whatever').myFunction({ 'my' : 'arg', 'my2' : 'arg2' });
$('.mydiv').myFunction('destroy');
我知道有很多Javascript教程,但我不知道如何搜索这种类型的功能。任何帮助将不胜感激!
答案 0 :(得分:4)
在您的情况下,看起来您只需要扩展jQuery.prototype
。
jQuery.extend( jQuery.fn, mything );
但是,即使不是非常值得推荐,也可以去最终的根并扩展Object.prototype
。这个真的会将这些功能添加到每个对象中。
答案 1 :(得分:2)
这不一定是一个好主意(这是一个可怕的想法),但你可以用原型实现这个目标:
Object.prototype.myFunction = function() {
console.log('Called myFunction');
};
你可以看到任意对象会发生什么:
document.myFunction();
请注意,添加到您自己以外的类的原型(尤其是属于您自己以外的库的内置对象或类)会引起很多混淆。这是Google自己的样式指南recommends against this的原因之一(尽管很多人试图将String.startsWith,String.endsWith和许多其他有用的操作添加到内置类型中)。
答案 2 :(得分:1)
clean 执行所描述的方法是将代码包装在jQuery插件中。
这是官方jquery plugin guide。通读它,实际上很容易理解。
关于包装函数的部分(以便$(selector).myFunction()
调用init
,$(selector).myFunction('doThis')
调用doThis
等等)是here。