Twitter Bootstrap JS中$ .fn.foo.Constructor = Foo的目的是什么?

时间:2012-05-09 23:33:48

标签: javascript jquery

Twitter Bootstrap的所有jQuery插件都遵循定义控制插件行为的类的相同基本模式。接近结束时,他们这样做:

$.fn.alert.Constructor = Alert

这是做什么的?

我假设这是定义一个原型构造函数,但它们使用大写C.这种情况不重要吗?除此之外,我真的不明白这是做什么以及它如何被插件使用。

举个例子,这是Alert插件: https://github.com/twitter/bootstrap/blob/master/js/bootstrap-alert.js

1 个答案:

答案 0 :(得分:24)

这里没有魔法,Constructor(大C)因为属性没有特殊意义。这只是惯例。

基本上他们使用类似结构来定义功能

var Alert = function() {};
Alert.prototype.foo = function() {};

并通过非类似接口公开它。

$('#blurf').alert();

所以这只是一个有用的插件约定。每个jQuery插件都在$.fn对象上定义自己的主要方法,该方法可以通过闭包访问它所需的构造函数。但构造函数本身对该闭包是私有的。将其分配给$.fn.myplugin.Constructor只是使该构造函数可以被其他代码访问,如果需要,您可以进行高级控制

var myAlert = new $.fn.alert.Constructor('Hello World'); // or something

现在你可能会这样:

$.fn.alert.Alert = Alert;

这是主观的,丑陋的和多余的。现在你必须翻译或猜测导致构造函数的属性名称。如果你说每个插件都是用一个类实现的,并且每个类构造函数都可以在$.fn.myplugin.Constructor找到,那么你就有了一个一致的接口来访问每个插件背后的类。

所以,这仅仅是惯例,没有什么太特别的。