bind()兼容性处理

bind()方法可以改变一个方法中的this,并且不立即执行该方法,但是该方法存在兼容性问题,IE9+,ff4+,chrome7+支持此方法,opera和safari不支持。因此我们需要使用apply()方法来解决bind()兼容性问题。

 1 //在Function的原型上定义myBind()方法
 2 Function.prototype.myBind=function myBind(context){
 3 //获取要操作的函数
 4 var _this=this;
 5 //获取实参(context除外)
 6     var args=Array.prototype.slice.call(arguments,1);
 7 //判断当前浏览器是否兼容bind()方法
 8 if(‘bind‘ in Function.prototype){
 9 //如果浏览器兼容bind()方法,则使用bind()方法,并返回bind()方法执行后的结果
10     return _this.bind(context,args);
11 }
12 //如果不兼容bind()方法,则返回一个匿名函数
13     return function(){
14         _this.apply(context,args);
15     }
16 }
时间: 2024-12-16 21:34:57

bind()兼容性处理的相关文章

修改this指向(bind、call 和 apply)

一.bind 首先: var alertWrite = document.write; alertWrite('who am I?'); 这两行代码的运行结果是什么呢?不要急着回答,看完下面的内容再回答. bind 的其中一个用法就是:绑定函数,使其无论怎么样调用都用相同的 this 看下面的例子: var obj = { getThis: function() { console.log(this); } };obj.getThis(); var getThisCopy = obj.getTh

javascript 原生bind方法实现

bind方法可以用来给一个方法绑定上下文环境对象,以及重新给方法传参数.bind的另一个简单使用是使一个函数拥有预设的初始参数.我们称为偏函数 function list() { return Array.prototype.slice.call(arguments); } var list1 = list(1, 2, 3); // [1, 2, 3] // Create a function with a preset leading argument var leadingThirtysev

HTML5中类jQuery选择器querySelector的高级使用

基本用法 querySelector 该方法返回满足条件的单个元素.按照深度优先和先序遍历的原则使用参数提供的CSS选择器在DOM进行查找,返回第一个满足条件的元素. ----> querySelector得到一个DOM var element = document.querySelector('#container');//返回id为container的dom var element = document.querySelector('div#container');//返回id为contai

JS事件之自建函数bind()与兼容性问题解决

JavaScript事件绑定常用方法 对象.事件 = 函数; 它只能同时为一个对象的一个事件绑定一个响应函数 不能绑定多个,如果有多个,后面的会覆盖前面的 addEventListener() 此方法也可以为元素绑定响应函数 参数: 事件的字符串(不带on) 回调函数,事件触发时执行 是否在捕获阶段触发事件,一般都传false 使用此方法可以为一个元素的同一事件绑定多个响应函数 当事件触发时,按绑定顺序依次执行 attachEvent() IE8及以下浏览器不支持addEventListener

bind() live()和delegate 区别

Event bubbling (aka event propagation)冒泡 我们的页面可以理解为一棵DOM树,当我们在叶子结点上做什么事情的时候(如click一个a元素),如果我们不人为的设置stopPropagation(Moder Browser), cancelBubble(IE),那么它的所有父元素,祖宗元素都会受之影响,它们上面绑定的事件也会产生作用.看一个示例: $('a').bind('click', function() { alert("That tickles!&quo

jQuery绑定事件的四种方式:bind、live、delegate、on

1.jQuery操作DOM元素的绑定事件的四种方式 jQuery中提供了四种事件监听方式,分别是bind.live.delegate.on,对应的解除监听的函数分别是unbind.die.undelegate.off. 2.必备的基础知识: DOM树 示例,这是在browser环境下的一棵模拟DOM树: 我们的页面可以理解为一棵DOM树,当我们在叶子结点上做什么事情的时候(如click一个a元素),如果我们没有人为的设置stopPropagation(Moder Browser), cancel

c++11特性与cocos2d-x 3.0之std::bind与std::function

昨天同事让帮忙写一小功能,才发现cocos2d-x 3.0 和 cocos2d-x 3.0rc0 差别还是相当大的. 发现Label这一个控件,3.0就比rc0版本多了一个创建函数,更为关键的是3.0内的Label锚点是在ccp(0.5,0.5),而一直3.0rc0是ccp(0,0). 累觉不爱.尽管cocos2d-x改变太快,兼容性一次次的暴露出不足,但是,总归是向好的方向进行.于是下载了3.0来玩玩~ cocos new 出新的项目之后,仔细阅读代码,才发现了一句3.0区别于2.0的代码:

IE6-IE11兼容性问题列表及解决办法总结

相比IE6-IE9那版,主要添加IE10和IE11的新变化. 以下是目录及下载链接: 目录 概述 2 第一章:HTML 3 第一节:IE7-IE8更新 3 1. 如果缺少结束标记的 P 元素后跟 TABLE.FORM.NOFRAMES 或 NOSCRIPT 元素,会自动添加结束标记. 3 2. 支持格式正确的有效标记,不再支持格式错误的 HTML. 4 3. Button标签的默认type类型从button改为submit. 5 4. 不再支持 COL 及 COLGROUP 元素的部分属性及为其

梦游前端,JavaScript兼容性

前端兼容问题出现的原因 何为操作系统?操作系统(Operating System)是管理和控制计算机硬件与软件资源的计算机程序.是的,任何的应用软件必须在操作系统的支持下运行. 大家会疑问?为什么我要讲操作系统?你猜! 其实,我只想表述我自己的一个观点,“Web浏览器是Web应用的操作系统”.这句话来源于JavaScript权威指南. 正因为Web浏览器(IE.Mozilla.Apple.Google.360浏览器.QQ浏览器)的多样性,才出现了所谓的兼容性问题. 编写一个JavaScript程