gpt4 book ai didi

jQuery 启动

转载 作者:行者123 更新时间:2023-11-29 20:21:47 28 4
gpt4 key购买 nike

在使用了很长时间的 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 。我哪里错了?是因为范围限制还是代码写得不好?

最佳答案

最后,将您的对象分配给 window,这使得它即使在您的匿名函数之外也可以全局使用。

window.JS = JS;

检查 jQuery 源代码中的这一行 very end这说明了为什么 jQuery$ 甚至在匿名函数之外定义。

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);

关于jQuery 启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3669910/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com