js 模拟 jQuery 以及扩展功能 extends
2020-03-30 08:25
991 查看
直接上代码:(理解请看注释,下方还有html实例测试)
//****************************************匿名函数自执行 (function () { /*定义类(构造函数)——$$*/ class $$ { /*实例的各种方法的构造器*/ constructor(selector) {//此处的参数为new实例时传入的 /*解析参数,得到节点*/ let dom; typeof selector !== 'string' ? dom = selector : dom = document.querySelectorAll(selector); /*实例的方法*/ /*获取或设置dom属性*/ this.dom = dom; this.attr = function (keys, values) { if (values === undefined) { return dom.getAttribute(keys) } else { dom.setAttribute(keys, values) } }; this.test = function () { return '这是$()的方法:test' }; } } /*定义window的全局方法——$*/ window.$ = function (selector) { return new $$(selector); }; /*定义$本身的方法*/ $.sum = function (arr) { let sum = 0; for (let i of arr) { sum = sum + parseFloat(i); } return sum }; $.test = function () { return '这是$本身的方法:test' }; /*将原型对象赋予给$的fn属性*/ $.fn = $$.prototype; /*函数本身的扩展方法*/ $.extends = function (obj) { let keyName = Object.keys(obj)[0]; let keyValue = obj[Object.keys(obj)[0]]; return $[keyName] = keyValue; }; /*实例化的扩展方法*/ $.fn.extends = function (obj) { let keyName = Object.keys(obj)[0]; let keyValue = obj[Object.keys(obj)[0]]; return $.fn[keyName] = keyValue; }; })(); //************************************代码测试区域 /*基础功能测试*/ console.log($.test());// 这是$本身的方法:test console.log($.sum([1, 2, 3, 4]));// 10 console.log($().test());// 这是$()的方法:test /*扩展测试*/ $.extends({ open() { return 123 } }); console.log($.open()); //123 $.fn.extends({ open() { return 789 } }); console.log($().open()); //789
附上html的测试代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>myFn</title> </head> <body> <div id="my_div"></div> <div class="my_div"></div> <div onclick="beClick(this)" class="btn pp">123</div> <script src="js/myFn.js"></script> <script> //测试传this function beClick(obj) { //调用实例的方法 $(obj).attr('data_id', 456); console.log($(obj).attr('data_id'));//456 } //测试传选择器 console.log($('#my_div').dom[0]);//返回这个节点 </script> </body> </html>
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- jquery.Table实现的翻页功能比较完整漂亮,本想扩展个模版DIV
- 基于jQuery实现文本框缩放以及上下移动功能
- jQuery 学习第七课 扩展jQuery的功能 插件开发
- 采用Jquery,在table上实现对行的单击、双击、返回选中行数据的功能,可作为GridView控制客户端的扩展
- jquery实现全选、反选以及删除、添加等功能
- jQuery扩展+xml实现表单验证功能的方法
- [JQuery]分页插件jQuery pager plugin功能扩展
- jquery的扩展学习之offset()以及blind()的用法
- Jquery、Json、Struts2、Spring实现Ajax动态功能以及注意事项
- jquery扩展以及jquery ui插件开发
- 基于JQuery的购物车添加删除以及结算功能
- 前端基础进阶(八):详细图解jQuery对象,以及如何扩展jQuery插件
- 兼容IE8以下浏览器input表单属性placeholder不能智能提示功能,以及使用jquery.validate.js表单验证插件的问题处理
- jQuery实现表单全选、全不选以及反选的功能
- jquery-easyui中datagrid扩展,隐藏显示表头功能
- Uncaught TypeError: $(...).Validform is not a function 如何解决,以及其他方式替换jquery功能
- aspx中的表单验证 jquery.validate.js 的使用 以及 jquery.validate相关扩展验证(Jquery表单提交验证插件)
- 深入了解jquery(2)-扩展jquery以及实现链式调用
- FCKeditor是使用非常广泛的HTML编辑器,本文从 ASP.NET 的使用场景对 FCKeditor 与 FCKeditor.NET 的配置、功能扩展(如自定义文件上传子目录、自定义文件名、上传图片的后期处理等)、以及安全性进行初步的阐述。
- 前端分页功能的实现以及原理(jQuery)