1.应用案例:
        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代码得拯救你多少时间相关推荐

  1. js图片转二进制流_V8是如何执行一段JS代码的?

    汇编器 编译器 解释器 解释执行和解释执行 什么是V8? V8执行Js代码的过程 汇编器 编译器 解释器 众所周知,计算机只能理解机器语言,而我们平时编程用的通常是高级语言,所以源代码通常都要经过层层 ...

  2. c# 如何在webbrowser控件执行一段JS代码

    var doc = this.WebBrowser.Document.DomDocument as IHTMLDocument2; var win = doc.parentWindow as IHTM ...

  3. js调用android代码怎么写,Android端使用WebView注入一段js代码实现js调用android

    需求:为网页上个链接增加点击事件,但是这个链接无法增加js代码 url:http://public.rongcloud.cn/view/D4F444BE2D94D760329F3CF38B4AE35C ...

  4. JavaScript 技术篇-一段js代码展示可以随鼠标移动变换样式的卡通人物,动态女生眼睛跟着鼠转动

    把这段代码写在一个 html 文件里,然后用浏览器打开. <!DOCTYPE html> <html> <body><script src="htt ...

  5. 写一段js代码 生成心形动画,动画路径内部填充渐变色

    以下是一个用纯JS和HTML5 Canvas实现的生成心形动画的代码,路径内部填充渐变色: <canvas id="myCanvas"></canvas>& ...

  6. 一张图展示一段js代码的一生,变量对象、作用域链、闭包、this

    我也只是进行了一个简单的囊括,图中来源均属该文,强烈推荐小伙伴去详细看一下'这波能反杀'的文章,定有收获.

  7. 记录一段js代码匹配JSON的值

    var jsd = {"res_info":[{"name":"衣七","ident":"衣七",& ...

  8. 编写js代码,实现根据系统时间显示问候语的功能,通过改变div中的内容,显示不同问候语

    要求如下: 6点之前--凌晨好 9点之前--早上好 12点之前--上午好 14点之前--中午好 17点之前--下午好 19点之前--傍晚好 22点之前--晚上好 22点之后包括22点--夜里好 < ...

  9. 一段和弹出窗口有关的JS代码

    前面有朋友在制作FLASH主页时需要根据需要弹出窗口并根据弹出的结果(有些用户浏览器可能会评比弹出窗口)进行不同的操作.于是帮朋友写了很简单的一段JS代码,今天整理BLOG的时候翻了出来.贴在这里,希 ...

最新文章

  1. 玩转SpringCloud Spring Cloud 微服务
  2. 几款LED灯带作为反向电流感应测试
  3. linux 安装python
  4. 一文带你认识Spring事务
  5. 中国搜索引擎市场用户行为洞察2020
  6. AI攻城狮,你需要那个数据集的种子么?
  7. 使用servlet+jdbc+MD5实现用户加密登录
  8. 使用cmd命令行装逼,让命令行滚动起来
  9. Spark学习笔记(一)
  10. 免费html转换成word,如何免费将网页内容转成Word文档
  11. SpringBoot + Vue基本知识点荟萃
  12. hdoj6441(勾股数)(模板 重要)
  13. 运筹说 第77期 | 算法介绍之图与网络分析(一)
  14. vue项目,h5图片放大后,支持手指缩放功能
  15. HTC One M7刷机包 基于官方4.3.0 精简稳定 省电(新蜂V2.5)
  16. 用C语言,职工信息管理系统
  17. ASP使用MD5加密
  18. vue项目每30秒刷新1次接口获取数据
  19. 网络变压器 原理、功能、解决辐射发射问题的应用
  20. Linux下获取相关文件夹下的文件,比如jpg文件,并输出到新的txt中

热门文章

  1. java基础—TreeSet集合中储存自定义对象(java集合二)
  2. VS2013常用设置和其他
  3. SpringBoot(入门)
  4. 小程序路由及路由传参
  5. 微信小程序_小程序开发框架
  6. input file HTML控件控制
  7. chromium浏览器开发系列第五篇:Debugging with WinDBG
  8. WP之Sql Server CE数据库
  9. obj.href 与 obj.getAttribute(href)的区别
  10. IIS7 配置 PHP