以下语法是什么意思?
(function($){
$.fn.columnize = function(options) {
...
什么function($)?
什么$.fn. …?
以下语法是什么意思?
(function($){
$.fn.columnize = function(options) {
...
什么function($)?
什么$.fn. …?
在编写插件时使用此约定以确保与其他使用 $ 符号的 Javascript 库没有冲突,同时确保插件作者仍然可以使用此符号:
(function($){
...
})(jQuery);
作者使用单个参数 ($) 声明了一个匿名函数,然后立即调用它并将 jQuery 对象传递给它。这可确保调用该函数并定义其中的所有内容。
更长的符号可能是:
function MyDefs($){
...
}
MyDefs(jQuery);
虽然这会MyDefs在全局命名空间中创建一个变量。匿名函数模式将全局命名空间留空,避免冲突。
它可能是一个 jQuery 扩展,它在最后基本上通过 (jQuery) 像
(function($){
//$ is jQuery here
//added columnize function to existing jQuery object
$.fn.columnize = function(options) {
}
})(jQuery);
我刚刚发现这个......它是代理模式吗?
代理模式
结合上述知识,作为 JavaScript 开发人员,您将获得很大的力量。结合它的一种方法是在 JavaScript 中实现代理模式,从而实现面向方面编程 (AOP) 的基础:
(function() {
// log all calls to setArray
var proxied = jQuery.fn.setArray;
jQuery.fn.setArray = function() {
console.log(this, arguments);
return proxied.apply(this, arguments);
};
})();
以上将其代码包装在一个函数中以隐藏“代理”变量。它将 jQuery 的 setArray 方法保存在一个闭包中并覆盖它。然后代理记录对该方法的所有调用,并将调用委托给原始方法。使用 apply(this, arguments) 保证调用者不会注意到原始方法和代理方法之间的区别。
不要被$. 实际上,$是 JavaScript 中的有效变量名(所有包含$, source (PDF) 的变量也是如此)。
所以,第一行可以改写为
(function (someVariable) {
这可能看起来更常见。其余的,是的,这是一个代理模式,詹姆斯怀斯曼的回答是解释发生了什么。