jquery 下载_下载jquery包_下载jquery后怎么引用

别忘了后续我们还希望能通过 $. / $.fn. 来扩展 JQ 的静态方法和原型方法,我们把出口方法抽出来增加这个 的API:

jquery 下载_下载jquery后怎么引用_下载jquery包

这样我们也能直接通过 $.fn. 来获取当前 JQ 版本号了。

如果希望可以通过 $. 直接访问 的原型对象,再修改下这句代码即可:

下载jquery包_下载jquery后怎么引用_jquery 下载

2. 写法优化

事实上我们不太喜欢再写多一个冗余的 构造函数来作为 . 的引用,也不喜欢(在模块内部)使用 .() 来扩展 JQ,它听起来和 JQ 没有半毛钱关系。

如果可以,直接把 方法作为接口输出,且在模块内部能以 .() 的形式来调用扩展接口,这样的形式更佳。

也就是说我们希望代码应该是这样写的:

jquery 下载_下载jquery包_下载jquery后怎么引用

“直接把 方法作为接口输出”意味着我们要把工厂模式挪入 方法中,显然我们不能这样改:

下载jquery包_下载jquery后怎么引用_jquery 下载

这样死循环了,调用栈会直接爆掉~

于是我们可以抽出一个 init 方法来做初始化处理(比如简单地注入检索到的元素到JQ对象中),把 方法中的内容更改为 new init() 就行了。

保证两个前提:

this 指向 上下文

其原型指向 的原型

第一点很好理解,方便我们直接在 init 方法中通过对 this 的操作来处理 JQ 实例上下文,如:

下载jquery后怎么引用_jquery 下载_下载jquery包

针对这点,我们不妨把 init 作为 . 的属性方法来实现:

下载jquery包_下载jquery后怎么引用_jquery 下载

然而这时候存在一个问题 —— JQ实例对象无法访问原型属性/方法:

jquery 下载_下载jquery包_下载jquery后怎么引用

原因很简单——我们还未实现上述提及的第二个前提——“init 原型指向 的原型”

在 js 中,实例的内部原型()总是指向其构造函数的原型(),而经过我们这番修改,JQ实例的构造函数已经变成了 .fn.init ,而其原型并非指向 的原型,这导致 JQ 实例无法顺其原型链爬取到 .。

要实现这个条件,只需要做小小改动——把 .fn.init 的原型指向 的原型(. / .fn)即可:

下载jquery包_下载jquery后怎么引用_jquery 下载

这里贴下完整代码:

下载jquery后怎么引用_jquery 下载_下载jquery包

3. 链式写法实现

JQ 里一个很大的亮点是,它支持链式写法,调用起来非常方便:

jquery 下载_下载jquery包_下载jquery后怎么引用

其实现其实非常简单 —— 确保每个调用的方法尾部均返回自身即可,这里我们新增两个实例方法做示例:

下载jquery后怎么引用_下载jquery包_jquery 下载

链式调用:

下载jquery后怎么引用_下载jquery包_jquery 下载

效果如下,杠杠的:

4. 冲突处理

存在某些情况jquery 下载,用户可能并不想拿 .$ 甚至 . 来引用 JQ 接口,或者已经有其它库使用了 .$ 这个变量,如果我们粗暴地改变其引用肯定是不合理的。

so 我们来实现 JQ 中冲突处理的静态接口 .,这意味着在代码段开始时jquery 下载,就得先保存下当前 .$ 和 . 两个变量:

下载jquery后怎么引用_jquery 下载_下载jquery包

然后是实现 方法,退耕还林,把保存的变量吐回去即可:

jquery 下载_下载jquery包_下载jquery后怎么引用

deep 参数类型为 ,若为真,表示要求连. 变量都需要吐回去。

留意在尾部我们返回了 的接口引用,这意味着我们可以以

jquery 下载_下载jquery后怎么引用_下载jquery包

的形式来把它赋予新的变量。

接着在外部运行如下代码:

下载jquery包_下载jquery后怎么引用_jquery 下载

输出如下:

下载jquery包_jquery 下载_下载jquery后怎么引用

第一篇就写到这里,相关的代码可以从 我的 上下载到。

下次我们会试着实现模块化的写法,并与时俱进,改用 ES6解构赋值语法 + 来进行打包以减少可能存在的冗余代码段。

最后

发现竟然是第二篇分享的,之前的是

关于本文


限时特惠:
本站持续每日更新海量各大内部创业课程,一年会员仅需要98元,全站资源免费下载
点击查看详情

站长微信:Jiucxh

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注