怎么写一款属于自己的JS类库
发表于:2025-11-10 作者:千家信息网编辑
千家信息网最后更新 2025年11月10日,这篇文章主要讲解了"怎么写一款属于自己的JS类库",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"怎么写一款属于自己的JS类库"吧!API介绍和效果展示事
千家信息网最后更新 2025年11月10日怎么写一款属于自己的JS类库
这篇文章主要讲解了"怎么写一款属于自己的JS类库",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"怎么写一款属于自己的JS类库"吧!
API介绍和效果展示
事件绑定 Xuery.on(eventName, fn) 案例如下:
Xuery('#demo').on('click', function(e){ alert('hello world!') })访问和设置css Xuery.css(string|object, ?[string]) 案例如下:
// 访问css Xuery('#demo').css('width') // 设置css Xuery('#demo').css('width', '1024px') // 设置css Xuery('#demo').css({ width: '1024px', height: '1024px' })访问和设置属性 Xuery.attr(string|object, ?[string]) 案例如下:
// 访问attr Xuery('#demo').attr('title') // 设置attr Xuery('#demo').attr('title', '1024px') // 设置attrs Xuery('#demo').attr({ title: '1024px', name: '1024px' })访问和设置html 案例如下:
// 访问 Xuery('#demo').html() // 设置 Xuery('#demo').html('前端学习原生框架')还有其他几个常用的API在这里就不介绍了,大家可以在我的github上查看,或者基于这套基础框架,去扩展属于自己的js框架。
核心源码
以下源码相关功能我做了注释,建议大家认真阅读,涉及到原型链和构造函数的指向的问题,是实现上述调用方式的核心,又不懂可以在评论区交流沟通。
/** * 链模式实现自己的js类库 */ (function(win, doc){ var Xuery = function(selector, context) { return new Xuery.fn.init(selector, context) }; Xuery.fn = Xuery.prototype = { constructor: Xuery, init: function(selector, context) { // 设置元素长度 this.length = 0; // 默认获取元素的上下文document context = context || document; // id选择符,则按位非将-1转化为0 if(~selector.indexOf('#')) { this[0] = document.getElementById(selector.slice(1)); this.length = 1; }else{ // 在上下文中选择元素 var doms = context.getElementsByTagName(selector), i = 0, len = doms.length; for(; i=0;i--){ this[i].addEventListener(type, fn, false) } return this } // ie浏览器dom2级事件 }else if(document.attachEvent){ return function(type, fn){ var i = this.length -1; for(; i>=0;i--){ this[i].addEvent('on'+type, fn) } return this } // 不支持dom2的浏览器 }else{ return function(type, fn){ var i = this.length -1; for(; i>=0;i--){ this[i]['on'+type] = fn; } return this } } })() }) // 将‘-’分割线转换为驼峰式 Xuery.extend({ camelCase: function(str){ return str.replace(/\-(\w)/g, function(all, letter){ return letter.toUpperCase(); }) } }) // 设置css Xuery.extend({ css: function(){ var arg = arguments, len = arg.length; if(this.length < 1){ return this } if(len === 1) { if(typeof arg[0] === 'string') { if(this[0].currentStyle){ return this[0].currentStyle[arg[0]]; }else{ return getComputedStyle(this[0], false)[arg[0]] } }else if(typeof arg[0] === 'object'){ for(var i in arg[0]){ for(var j=this.length -1; j>=0; j--){ this[j].style[Xuery.camelCase(i)] = arg[0][i]; } } } }else if(len === 2){ for(var j=this.length -1; j>=0; j--){ this[j].style[Xuery.camelCase(arg[0])] = arg[1]; } } return this } }) // 设置属性 Xuery.extend({ attr: function(){ var arg = arguments, len = arg.length; if(len <1){ return this } if(len === 1){ if(typeof arg[0] === 'string'){ return this[0].getAttribute(arg[0]) }else if(typeof arg[0] === 'object'){ for(var i in arg[0]){ for(var j=this.length -1; j>= 0; j--){ this[j].setAttribute(i, arg[0][i]) } } } } else if(len === 2){ for(var j=this.length -1; j>=0; j--){ this[j].setAttribute(arg[0], arg[1]); } } return this } }) // 获取或者设置元素内容 Xuery.fn.extend({ html: function(){ var arg = arguments, len = arg.length; if(len === 0){ return this[0] && this[0][xss_clean] }else{ for(var i=this.length -1; i>=0; i--){ this[i][xss_clean] = arg[0]; } } return this } }) Xuery.fn.init.prototype = Xuery.fn; window.Xuery = Xuery; })(window, document); 感谢各位的阅读,以上就是"怎么写一款属于自己的JS类库"的内容了,经过本文的学习后,相信大家对怎么写一款属于自己的JS类库这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
元素
案例
学习
内容
框架
上下
上下文
事件
对象
属性
核心
浏览器
源码
问题
浏览
选择
函数
分割线
前端
功能
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
外卖小程序服务器可以用别人的吗
服务器可以家用
软件开发用服费的账务处理
小样本数据需要在服务器上跑吗
网络安全信息报送机制
农村生态环境的数据库
锦州最大的互联网科技公司
中国服务器产业发展
血色末途哪个服务器好
公共云数据库有病毒吗
青岛市软件开发公司
网络安全管理 法制轨道
商洛5g软件开发工程师
为什么手游开服务器那么多人
什么是锁数据库
百辰网络技术
软件开发管理资料
服务器管理需要注意什么
神州数码服务器测试工程师面试
数据库dba工资一般多少
gp数据库字节长度函数
ha做数据库双机
盘锦开速软件开发公司电话
公共云数据库有病毒吗
快手招聘软件开发
帝国cms 审核 数据库
网络安全教育教学的课程总结
数据库数据同步技术
数据库索引存在的弊端有哪些
地铁查询软件开发