12

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

$.fn.alert.Constructor = Alert

这是在做什么?

我假设这是定义一个原型构造函数,但它们使用大写 C。大小写在这里无关紧要吗?除此之外,我真的不明白这是在做什么以及插件如何使用它。

例如,这里是警报插件: https ://github.com/twitter/bootstrap/blob/master/js/bootstrap-alert.js

4

1 回答 1

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那么你就有了一个一致的接口来访问每个插件背后的类。

再说一次,这只是惯例,没什么特别的。

于 2012-05-10T00:44:03.280 回答