这段js代码得拯救你多少时间
var Mouse = function () {// Look! no that = this! this.position = [0, 0];if (document.addEventListener) { document.addEventListener('mousemove', ?); //this.move? } else if (document.attachEvent) { document.attachEvent("onmousemove", ?); //this.move?怎么放进去 } }; Mouse.prototype.move = function (arg1,arg2,event) { event = window.event || event;var x = event.pageX || event.offsetX, y = event.pageY || event.offsetY;this.position = position = [x, y];this.log(arg1,arg2); }; Mouse.prototype.log = function (arg1, arg2) { console.log(arg1+","+arg2); console.log(this.position); };new Mouse();
上面你知道'?'号那里要干嘛了吗?我想给document的mousemove绑定我的move方法,但是遇到难题了,这样的话,Mouse.prototype.move
里的this就不会指向Mouse的对象,相信大家经常碰到这种问题.也许你早知道了怎么解决,但是有更快更简单的方法吗?答案是:
Function.prototype.bind()这个神奇的玩意,但是ie6 7 8都不支持,一般现代浏览器都支持了,我们接下来要做的就是模仿他,
这么好的方法当然要模仿它,怎么模仿见下面nothing的原创方法
(function () {var proxy = function (fn, target) {var proxy = function () {if (2 < arguments.length) {var privateArgs = Array.prototype.slice.call(arguments, 2);return function () {var args = Array.prototype.slice.call(arguments); Array.prototype.unshift.apply(args, privateArgs);return fn.apply(target, args); } }return function () {return fn.apply(target, arguments); } }return proxy.apply(null, arguments); };/*支持原生的使用原生的*/ Function.prototype.bind = Function.prototype.bind ||function (target) { //这里的this指代要被代理的函数 if (1 < arguments.length) {var args = Array.prototype.slice.call(arguments, 1); //取出参数列表 args.unshift(this, target); //这个args最终变成了[this,绑定的对象,参数列表] return proxy.apply(null, args); }return proxy(this, target); }; })();
有了以上代码,我们就可以轻松的实现了"?"号这里要写什么代码了,^_^,简单吧
if (document.addEventListener) { document.addEventListener('mousemove', this.move.bind(this,1,2)); } else if (document.attachEvent) { document.attachEvent("onmousemove", this.move.bind(this,1,2)); }
是不是以后凡是碰到要添加事件,然后调用的方法的this又想指向其他对象,这样是不是很简单呢..
转载于:https://www.cnblogs.com/wichell/archive/2011/12/15/2289094.html
这段js代码得拯救你多少时间相关推荐
- js图片转二进制流_V8是如何执行一段JS代码的?
汇编器 编译器 解释器 解释执行和解释执行 什么是V8? V8执行Js代码的过程 汇编器 编译器 解释器 众所周知,计算机只能理解机器语言,而我们平时编程用的通常是高级语言,所以源代码通常都要经过层层 ...
- c# 如何在webbrowser控件执行一段JS代码
var doc = this.WebBrowser.Document.DomDocument as IHTMLDocument2; var win = doc.parentWindow as IHTM ...
- js调用android代码怎么写,Android端使用WebView注入一段js代码实现js调用android
需求:为网页上个链接增加点击事件,但是这个链接无法增加js代码 url:http://public.rongcloud.cn/view/D4F444BE2D94D760329F3CF38B4AE35C ...
- JavaScript 技术篇-一段js代码展示可以随鼠标移动变换样式的卡通人物,动态女生眼睛跟着鼠转动
把这段代码写在一个 html 文件里,然后用浏览器打开. <!DOCTYPE html> <html> <body><script src="htt ...
- 写一段js代码 生成心形动画,动画路径内部填充渐变色
以下是一个用纯JS和HTML5 Canvas实现的生成心形动画的代码,路径内部填充渐变色: <canvas id="myCanvas"></canvas>& ...
- 一张图展示一段js代码的一生,变量对象、作用域链、闭包、this
我也只是进行了一个简单的囊括,图中来源均属该文,强烈推荐小伙伴去详细看一下'这波能反杀'的文章,定有收获.
- 记录一段js代码匹配JSON的值
var jsd = {"res_info":[{"name":"衣七","ident":"衣七",& ...
- 编写js代码,实现根据系统时间显示问候语的功能,通过改变div中的内容,显示不同问候语
要求如下: 6点之前--凌晨好 9点之前--早上好 12点之前--上午好 14点之前--中午好 17点之前--下午好 19点之前--傍晚好 22点之前--晚上好 22点之后包括22点--夜里好 < ...
- 一段和弹出窗口有关的JS代码
前面有朋友在制作FLASH主页时需要根据需要弹出窗口并根据弹出的结果(有些用户浏览器可能会评比弹出窗口)进行不同的操作.于是帮朋友写了很简单的一段JS代码,今天整理BLOG的时候翻了出来.贴在这里,希 ...
最新文章
- 玩转SpringCloud Spring Cloud 微服务
- 几款LED灯带作为反向电流感应测试
- linux 安装python
- 一文带你认识Spring事务
- 中国搜索引擎市场用户行为洞察2020
- AI攻城狮,你需要那个数据集的种子么?
- 使用servlet+jdbc+MD5实现用户加密登录
- 使用cmd命令行装逼,让命令行滚动起来
- Spark学习笔记(一)
- 免费html转换成word,如何免费将网页内容转成Word文档
- SpringBoot + Vue基本知识点荟萃
- hdoj6441(勾股数)(模板 重要)
- 运筹说 第77期 | 算法介绍之图与网络分析(一)
- vue项目,h5图片放大后,支持手指缩放功能
- HTC One M7刷机包 基于官方4.3.0 精简稳定 省电(新蜂V2.5)
- 用C语言,职工信息管理系统
- ASP使用MD5加密
- vue项目每30秒刷新1次接口获取数据
- 网络变压器 原理、功能、解决辐射发射问题的应用
- Linux下获取相关文件夹下的文件,比如jpg文件,并输出到新的txt中