在使用了很长时间的 jQuery 之后,我有一个问题,我正在使用 jQuery 模式(样式)编写一个简单的代码,
(function(window, undefined) {
var jQuery = function (s, c) { ... }
}) (window);
众所周知,jQuery 是在一个自执行匿名函数中定义的,我猜想它的作用域 (jQuery) 应该限制在那个匿名函数内,但是我们如何访问 jQuery 之外的匿名方法?如果我的假设是错误的...请纠正我。
我尝试编写类似于 jQuery 激情的代码,即将我的整个代码包装在一个匿名方法中,例如
(function( w, u ) {
var JS = function() { return JS.fn.init();};
JS.fn = JS.prototype = {
init : function () {
alert('Initiated');
return this;
}
};
}) (window);
当我尝试调用 JS().init();
时,我的 firebug 控制台出现错误,提示 JS is not defined
。我哪里错了?是因为范围限制还是代码写得不好?
最后,将您的对象分配给 cửa sổ
,这使得它即使在您的匿名函数之外也可以全局使用。
window.JS = JS;
检查 jQuery 源代码中的这一行 very end这说明了为什么 jQuery
Và $
甚至在匿名函数之外定义。
window.jQuery = window.$ = jQuery;
除了范围,还有一些值得注意的事情,
JS.init()
不存在,因为没有创建新对象。使用 init
构造函数创建一个新对象。
var JS = function() { return new JS.fn.init(); };
通过在调用 JS()
时创建一个新函数,您不再需要自己调用 init。要创建新对象,只需使用:
var foo = JS();
这是完整的来源:
(function( w, u ) {
var JS = function() {
// create a new object
return new JS.fn.init();
};
JS.fn = JS.prototype = {
init : function () {
console.log('Initiated');
return this; // not needed
}
};
// link the init constructor with JS.prototype
JS.fn.init.prototype = JS.fn;
// make globally available
window.JS = JS;
}) (window);
Tôi là một lập trình viên xuất sắc, rất giỏi!