javascript - 工作笔记 (事件四)
在javascript - 工作笔记 (事件绑定二)篇中,我将事件的方法做了简单的包装,
|
1
2 3 4 5 |
yx.bind(item, "click", function (e) {
//console.log("Div Click 1 !"); alert("Div Click 1 !"); e.stopPropagation(); }); |
但是这样用起来有些不顺手,添加方法还要加个标签元素对象,能不能去掉第一个参数呢,答案是肯定的。
我们只需要将DOM元素对象转换成Yx对象,就可以了。但是要如何将dom变成Yx对象呢,如下:
|
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
var Yx = function (ele) {//dom元素对象
var self = this; if ( (ele instanceof Array) || (NodeList || (ele instanceof NodeList))) { ; i < ele.length; i++) { self[i] = ele[i]; } self.length = ele.length; } else { self[] = ele; self.length = ; } return self; } |
我们将dom元素对象挂在Yx对象的下面,像数组一样,使用下标获取,设置值,同时还保留了DOM节点自带的方法,属性。这时,我们使用的时候如下:
|
1
2 3 |
var item = document.getElementById("test");//获取dom对象
var yxItem = new Yx(item);//新建Yx对象 yxItem.bind( "click", function (e) { ... });//绑定事件 |
但,这样写也有点不爽,每次还要new一下,能省掉new吗,当然可以。
|
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Yx.prototype.init = function(ele){
var self = this; if( (ele instanceof Array) || (NodeList || (ele instanceof NodeList))){ ;i<ele.length;i++){ self[i] = ele[i]; } self.length = ele.length; }else{ self[] = ele; self.length = ; } return self; } |
我们新建一个方法为init用来新建Yx对象使用,同时,我们在构造方法中,这样写:
|
1
2 3 4 5 6 7 8 |
var Yx = function(ele){
Yx.fn = Yx.prototype;//将Yx原型链赋值给Yx.fn //这种方法因为在使用的时候去掉了new,被称为无new的构造方法,在源码中,我介绍了两种无new方法,写法不同,其实原理一样。
|
这时候我们使用方法如下:
|
1
2 3 4 5 6 7 8 9 |
var item = document.getElementById("test");
var yxItem = yx(item);//直接调用yx方法,该方法中new Yx.fn对象 yxItem.bind("click",function(e){ console.log("Div Click 1 !"); e.stopPropagation(); }); window.$ = window.yx = Yx;//当然得有这么一句话才能直接使用yx(...)方法了, |
完整代码如下:
|
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
(function (window) {
var Yx = function (ele) { //第一种无new实现方法 //第二种无new实现方法 //Yx.fn = Yx.prototype; var test = document.getElementById("test"); testItem.bind("click", function (e) { var funcTest1 = function (e) { testItem.bind("click", funcTest1); var pArr = document.getElementsByTagName("p"); pArrItem.bind("click", function (e, item) { var link = document.getElementById("a_link"); |
第一种无new方法与第二种无new方法原理一样,只是第一种方法看的明白些,第二种看起来NB一些,哈哈!
javascript - 工作笔记 (事件四)的更多相关文章
- How Javascript works (Javascript工作原理) (十四) 解析,语法抽象树及最小化解析时间的 5 条小技巧
个人总结:读完这篇文章需要15分钟,文章介绍了抽象语法树与js引擎解析这些语法树的过程,提到了懒解析——即转换为AST的过程中不直接进入函数体解析,当这个函数体需要执行的时候才进行相应转换.(因为有的 ...
- javascript - 工作笔记 (事件绑定)
背景: 目前所做的项目,只能使用的是原生的javascript.对于javascript的事件绑定想必大家都懂得语法: 1,在标签中使用属性调用方法:<div onclick="AAA ...
- javascript - 工作笔记 (事件绑定二)
在上篇中的事件绑定方法,相信大家都看到过了. 不过这里有点小小的问题,这些方法,变量都是全局的,难免会与其他的库或者方法发生冲突而被覆盖,因此,我在这里做了小小的封装,如下: JavaScript ...
- javascript - 工作笔记 (事件三)
有关定义就不多说了,事件分两种 一,冒泡型事件 这是IE浏览器中事件模型的实现,顾名思义,就像水中的泡一样,自底而上,其经过的父元素都会触发对应的事件. 即:触发元素的父元素先于触发元素触发,看dem ...
- JavaScript学习笔记——事件
javascript事件基础和事件绑定 一.事件驱动 1.事件 javascript侦测到的用户的操作或是页面的一些行为(怎么发生的) 2.事件源 引发事件的元素.(发生在谁的身上)3.事件处理程序 ...
- javascript学习笔记(四):事件处理函数和动态创建html标记。
1 HTML的事件属性 全局事件属性:HTML 4 增加了使事件在浏览器中触发动作的能力,比如当用户点击元素时启动 JavaScript. a. Window 事件属性,针对 window 对象触发 ...
- JavaScript基础笔记(四) JS式面向对象
JS式面向对象 一.理解对象 一)属性类型 ECMA-262 第 5 版在定义只有内部才用的特性(attribute)时,描述了属性(property)的各种特征. ECMA-262 定义这些特性是为 ...
- 8. JavaScript学习笔记——事件
8. 事件 8.1 事件基础 /// 事件就是用户或浏览器自身执行的某种动作.诸如 click.load 和 mouseover,都是事件的名字.而响应某个事件的函数就叫做事件处理程序(或事件侦听器) ...
- iOS工作笔记(十四)
1.scrollview的frame指的是其可视范围,contentSize指的是其滚动范围,分别是在水平方向和竖直方向上的 所以要让scrollview在水平方向不能滚动,那么需要如下设置 _scr ...
随机推荐
- JavaScript的异步操作
http://sporto.github.io/blog/2012/12/09/callbacks-listeners-promises/
- Javascript-数据类型、类型转换
typeof 判断数据类型: var n = 1; var t = "echo"; var fn = function() {} var arr = [1,2,3]; typeof ...
- ios html5 长按复制文本
以前做的项目,主要是针对ios的,安卓上面也没有测试. 原理其实是系统自带的功能,那时候借鉴的其他网站,没有试验通过document.execCommand("Copy"),别的j ...
- python提取隐含结构的字符串
当我用Stanford CoreNLP和A Python wrapper for the Java Stanford Core NLP tools(NLP的python调用工具)进行句法分析时,遇到一 ...
- Windows 10上快速尝鲜bash on Ubuntu
今年微软Build 2016大会最让开发人员兴奋的消息之一,就是在Windows上可以原生运行Linux bash,对于非开发人员来讲,可能不知道这意味着什么,而对于开发人员来说,意味着Windows ...
- win7+64安装PLSQL Developer 32位
原因分析:在网上搜索了半天,主要原因是oci.dll是64位的,而PL/SQL developer只有32位的,在使用64位oci.dll文件时出错! 解决方案(最便捷):1.到oracle官网下载O ...
- openwrt 新版IPV6问题
我的版本是r45579,表现是路由认证后正确获取IPV6地址并且可以ping通外网,电脑可以获取地址但是连不上外网. 加一条转发规则就好了 先查看/etc/config/network里给电脑分配的地 ...
- NFC介绍
简介 本文介绍Nokia设备所支持的近场通信技术(NFC)及相关的功能.旨在为使用 Qt/Symbian/Java™ API为Nokia手机开发应用的开发者 刚开始接触NFC开发时提供有用的信息. 什 ...
- firebug加载不了js脚本文件问题
转载自:http://tieba.baidu.com/p/1008322286 现象: 页面中有加载js文件,但是firebug却提示: 本页面不包含 Javascript 如果 <scr ...
- ubuntuOS
OpenStack icehource for Ubuntu OS 1,网络规划 2,Ntp apt-get install ntp 3,generate secure passwd apt-get ...