0

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

mything = {
    init: function(SELECTOR){

    },
    destroy: function(){

    }
};

但是我只能通过这种方式使用它:mything.init(SELECTOR);

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

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

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

4

3 回答 3

4

在您的情况下,看起来它足以让您扩展jQuery.prototype.

jQuery.extend( jQuery.fn, mything );

但是,当然可以,即使不是非常推荐,也可以去最终根并扩展Object.prototype. 这确实会将这些功能添加到每个对象。

于 2013-01-30T09:39:17.430 回答
2

这不一定是一个好主意(这是一个糟糕的主意),但您可以使用原型来实现:

Object.prototype.myFunction = function() {
  console.log('Called myFunction');
};

您可以看到任意对象会发生什么:

document.myFunction();

请注意,添加到您自己以外的类的原型(尤其是属于您自己以外的库的内置对象或类)可能会引起很多混乱。这就是为什么 Google 自己的样式指南不建议这样做的原因之一(尽管有很多尝试将 String.startsWith、String.endsWith 和许多其他有用的操作添加到内置类型)。

于 2013-01-30T09:39:22.557 回答
1

完成您所描述的工作的干净方法是将代码包装在 jQuery 插件中。

这是官方的jquery 插件指南。通读一遍,其实很容易理解。

关于包装函数的部分(以便$(selector).myFunction()调用init$(selector).myFunction('doThis')调用doThis等)在这里

于 2013-01-30T09:45:39.957 回答