如何将Javascript函数添加到每个对象?

时间:2013-01-30 09:35:46

标签: javascript jquery

我想知道如何附加一个可用于页面上每个对象的函数。我知道我可以这样做:

mything = {
    init: function(SELECTOR){

    },
    destroy: function(){

    }
};

但是我只能这样:mything.init(SELECTOR);

我想要的是能够以这种方式做同样的事情:

$('.mydiv, input, whatever').myFunction({ 'my' : 'arg', 'my2' : 'arg2' });
$('.mydiv').myFunction('destroy');

我知道有很多Javascript教程,但我不知道如何搜索这种类型的功能。任何帮助将不胜感激!

3 个答案:

答案 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