addEventListener 的事件函數的傳遞【轉載】

addEventListener(type, listener[, useCapture]);
  1. type,事件名稱
  2. listener,事件處理器
  3. useCapture,是否捕獲

一直把 listener 記成是響應函數,function 類型。相信很多人也是這么理解的。多數時候是這么使用

elem.addEventListener('click', function(ev) {// todo
}, false);

?

第一個參數沒什么異議,第二個參數傳一個 function,第三個參數傳 false,事件流為了和低版本IE保持一致(都冒泡)。

?

在讀?iscroll.js(5.1.3) 源碼時發現還有這樣一種寫法?

// _initEvents 863行,方法
eventType(window, 'orientationchange', this);
eventType(window, 'resize', this);// eventType 42行,如下
me.addEvent = function (el, type, fn, capture) {el.addEventListener(type, fn, !!capture);
};

?

?

簡化為如下測試代

var obj = {handleEvent: function(ev) {console.log(ev)
}}
document.addEventListener('click', obj, false)

沒錯,第二個參數不是 function,而是一個 object。一下糊涂了,世界觀一時半會沒改變過來。怎么能是一個對象呢?慣性思維和不看規范帶來的后患是巨大的。點擊文檔沒有報錯,說明確實是可以這么使用的。

實際 W3C DOM2 Events 里定義的 listener,沒說必須是 function 類型。

Interface EventListener (introduced in DOM Level 2)

只要實現了以上接口就都能作為 listener,簡單說只要給對象添加 handleEvent 方法就可以作為 listener了。

?

通過這種方式添加事件的一好處就是當你采用類式開發時?this?能輕松的綁定到當前類上。如下

function Component(elem, option) {this.elem = elemthis.handleEvent = function(ev) {if (ev.type === 'click') {this.updateNav()}if (ev.type === 'dblclick') {this.updateBottom()}}this.init()
}
Component.prototype = {init: function() {this.elem.addEventlistener('click', this, false)this.elem.addEventlistener('dblclick', this, false)},updateNav: function() {console.log('nav update')},updateBottom: function() {console.log('bottom update')}
}

?

轉載:原文:?http://www.cnblogs.com/snandy/p/4877069.html

轉載于:https://www.cnblogs.com/lydialee/p/4963214.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/286759.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/286759.shtml
英文地址,請注明出處:http://en.pswp.cn/news/286759.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Android之elevation實現陰影效果

1 需求 需要控件實現陰影效果 2 實現 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"andr…

十、小程序實戰 (IVX 快速開發教程)

十、小程序實戰 使用小程序完成一個二手信息站點與 WebApp 實現流程類型&#xff0c;只是部分內容使用了微信小程序特有的組件&#xff0c;例如微信登錄與 WebApp 略有差別&#xff0c;其它邏輯實現較為類似。我們先制作頁面&#xff0c;之后再實現功能。 由于之前已經完成了…

【VB測繪程序設計】第一章 VB測繪程序設計概述

目 錄 第一節 測繪程序設計的意義 第二節 程序設計語言的發展 第三節 測繪程序設計語言的選擇

類屬性和實例屬性沖突

類屬性和實例屬性名字沖突怎么辦 修改類屬性會導致所有實例訪問到的類屬性全部都受影響&#xff0c;但是&#xff0c;如果在實例變量上修改類屬性會發生什么問題呢&#xff1f;class Person(object):address Earthdef __init__(self, name):self.name namep1 Person(Bob) p2…

源代碼下載 第六章 注解式控制器詳解

2019獨角獸企業重金招聘Python工程師標準>>> 源代碼請到附件中下載。 其他下載&#xff1a; 跟著開濤學SpringMVC 第一章源代碼下載 第二章 Spring MVC入門 源代碼下載 Controller接口控制器詳解 源代碼下載 源碼下載——第四章 Controller接口控制器詳解——跟著開…

Android6.0到底有什么不一樣

在android 6.0&#xff08;API 23&#xff09;中&#xff0c;Google已經移除了移除了Apache HttpClient相關的類 http://developer.android.com/intl/zh-cn/about/versions/marshmallow/android-6.0-changes.html 本文轉自屠夫章哥 51CTO博客&#xff0c;原文鏈接&#xff1a;…

WPF|快速添加新手引導功能(支持MVVM)

閱讀導航前言案例一案例二案例三&#xff08;本文介紹的方式&#xff09;如何使用&#xff1f;控件如何開發的&#xff1f;總結1. 前言案例一站長分享過 眾尋 大佬的一篇 WPF 簡易新手引導 一文&#xff0c;新手引導的效果挺不錯的&#xff0c;如下圖&#xff1a;該文給出的代碼…

三、界面介紹(IVX快速手冊)

三、集成開發環境界面介紹 通過本節你將了解 iVX 在線集成開發環境 界面&#xff0c;快速建立對 在線集成開發環境 的認識。 文章目錄三、集成開發環境界面介紹3.1 界面區域3.2 舞臺3.3 組件工具欄3.4 對象樹/素材面板3.5 屬性面板3.6 菜單面板3.7 邏輯工具面板3.8 輔助工具3.…

Android studio之提示Failed to resolve: com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.46

1、錯誤提示如下 Failed to resolve: com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.46 Show in Project Structure dialog Affected Modules: app2、解決辦法 在project的build.gradle里面加入 maven { url https://jitpack.io }

【VB測繪程序設計】第二章 VB測繪程序基礎

第一節 數據類型 VB中提供了以下11中基本的數據類型: 一、數值型 二、字符串 三、日期型 1.界面設計 2. 代碼 <

React-引領未來的用戶界面開發框架-讀書筆記(六)

第12章 服務端渲染 想讓搜索引擎抓取到你的站點&#xff0c;服務端渲染這一步不可或缺&#xff0c;服務端渲染還可以提升站點的性能&#xff0c;因為在加載JavaScript腳本的同時&#xff0c;瀏覽器就可以進行頁面渲染。 React的虛擬DOM是其可被用于服務端渲染的關鍵。首先每個R…

TrimPath - Js模板引擎

當頁面中引用template.js文件之后&#xff0c;腳本將創建一個TrimPath對象供你使用。 parseDOMTemplate(elementId,optionalDocument)  //獲得模板字符串代碼 得到頁面中Id為elementId的DOM組件的InnerHTML&#xff0c;將其解析成一個模板&#xff0c;這個返回一個templateOb…

appserv安裝

Appserv 官網: http://www.appservnetwork.com/ 安裝好后&#xff0c;輸入http://localhost:8082/驗證是否裝成功&#xff0c;成功后如下圖 http://localhost:8082/ 默認指定的文件夾是 進入到phpMyAdmin 的賬號是root&#xff0c;密碼是安裝時的密碼

一、iVX簡介(IVX 快速開發教程)

一、iVX簡介 通過本節你將對 iVX 有一個大致的認識&#xff0c;并且了解 iVX 能夠做些什么&#xff0c;有哪一些優勢&#xff0c;這將幫助你更好的上手 iVX 進行應用的開發&#xff0c;初步了解 iVX 的強大之處。 文章目錄一、iVX簡介1.1 iVX 是什么&#xff1f;1.2 iVX適合怎…

WPF效果第一百八十六篇之又玩ListBox

大周末的接著上一篇玩耍TreeView,這二天又再次去玩耍ListBox;畢竟是我的最愛,沒辦法就喜歡玩耍他;閑話也不多扯了,直接看咱們最終效果:2、原來一直ItemTemplate,這次直接ListBoxItem的Template:<Setter Property"Template"><Setter.Value><ControlTem…

Android之URL “page={page}category_id={***} string For dynamic query parameters use @Query.

1、問題 我們用retrofit進行Get網絡請求的時候&#xff0c;我代碼是這樣寫的 GET("/api/get_****/***?page{page}&category_id{category_id}")suspend fun getWebsiteCategory(Path("page") page: Int, Path("category_id") category_id: …

【VB測繪程序設計】第三章 VB結構化程序設計(順序、選擇、循環)

目 錄 第一節 順序結構設計 第二節 選擇結構設計 第三節 循環結構設計 第一節 順序結構設計 一、賦值語句

React-引領未來的用戶界面開發框架-讀書筆記(七)

第14章 開發工具 React使用了若干的抽象層來幫助你更輕松地開發組件、推導程序狀態。然而&#xff0c;在調試、構建及分發應用時&#xff0c;這樣設計就會產生負面影響了。 幸運的是&#xff0c;我們擁有一些非常好的開發工具能在開發及構建過程中為我們提供幫助。在這里探討這…

【十分鐘】學會微信小游戲,攀登不止小游戲制作(IVX 快速開發教程十一)

十一、攀登不止小游戲制作 制作微信小游戲大致流程與微信小程序、Web類似&#xff0c;不同的在于是組件的使用。我們此節需要完成的小游戲需求為&#xff1a; 小球觸碰矩形塊會跳躍或攀爬小球觸碰頂部或底部游戲結束點擊屏幕將會使小球朝著該方向移動小球進行跳躍時分數會增加…

十天沖刺---Day8

站立式會議 站立式會議內容總結&#xff1a;燃盡圖照片最近思考一個問題。項目是怎么進行到這一步的。算了&#xff0c;這個發在明天的沖刺總結吧。。還需繼續努力&#xff0c;隊友快回來快回來。。轉載于:https://www.cnblogs.com/imguang/p/4965054.html