当前位置:首页> 正文
ie支持function.bind()方法实现代码
前端开发者应该很清楚 Javscript 脚本的 function 函数对象可以通过 call 或 apply 方法,使其改变内部作用域(this)所指向的对象,实现更多可扩展的功能开发。ie 原生支持 function 对象的 call 和 apply 方法,在 firefox 或其它浏览器下也得到支持,但是 call 和 apply 方法是立即作用并执行,例如:
复制代码 代码如下:
var func = function () {
alert(this);
}.apply(window);
当脚本解析引擎执行到这段代码时,会立即弹出对话框并显示 object 字符串。我们的初衷是想定义 func 方法作用在 window 对象域上,并在后期调用时再执行,但是 call 和 apply 方法并不能满足我们的初衷,它们会立即得到执行。
在 google 一番技术资料后,发现 firefox 原生支持一个 bind 方法,该方法很好的满足了我们的初衷,调用方法与 call 和 apply 一样,只是定义完成后,在后期调用时该方法才会执行。但是这个 bind 方法只有在 ie10 版本的浏览器才得到原生支持,低于该版本的浏览器下执行时会得到一个 undefined 的错误提示。于是只好再次上网 google 解决方案,功夫不负有心人,我们在 firefox 的开发站找到了解决方案,那就是增加 property 原型使得所有浏览器都能支持 bind 方法,代码如下:
复制代码 代码如下:
if (!Function.prototype.bind) {
Function.prototype.bind = function (oThis) {
if (typeof this !== "function") {
// closest thing possible to the ECMAScript 5 internal IsCallable function
throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");
}
var aArgs = Array.prototype.slice.call(arguments, 1),
fToBind = this,
fNOP = function () {},
fBound = function () {
return fToBind.apply(this instanceof fNOP
};
fNOP.prototype = this.prototype;
fBound.prototype = new fNOP();
return fBound;
};
}
看懂这段代码需要点功底,我只是知道如何拿来用,如果哪位大牛有兴趣能够介绍一下这段源码的原理,不胜感激,谢谢!
单纯不是什么态度,而是一种满足。 您可能感兴趣的文章:让IE8浏览器支持function.bind()方法Function.prototype.bind用法示例javascript中的Function.prototye.bind深入理解JS中的Function.prototype.bind()方法jQuery中的.bind()、.live()和.delegate()之间区别分析JQuery中绑定事件(bind())和移除事件(unbind())JQuery中Bind()事件用法分析jQuery事件绑定on()、bind()与delegate() 方法详解浅谈javascript中call()、apply()、bind()的用法关于Function中的bind()示例详解
复制代码 代码如下:
var func = function () {
alert(this);
}.apply(window);
当脚本解析引擎执行到这段代码时,会立即弹出对话框并显示 object 字符串。我们的初衷是想定义 func 方法作用在 window 对象域上,并在后期调用时再执行,但是 call 和 apply 方法并不能满足我们的初衷,它们会立即得到执行。
在 google 一番技术资料后,发现 firefox 原生支持一个 bind 方法,该方法很好的满足了我们的初衷,调用方法与 call 和 apply 一样,只是定义完成后,在后期调用时该方法才会执行。但是这个 bind 方法只有在 ie10 版本的浏览器才得到原生支持,低于该版本的浏览器下执行时会得到一个 undefined 的错误提示。于是只好再次上网 google 解决方案,功夫不负有心人,我们在 firefox 的开发站找到了解决方案,那就是增加 property 原型使得所有浏览器都能支持 bind 方法,代码如下:
复制代码 代码如下:
if (!Function.prototype.bind) {
Function.prototype.bind = function (oThis) {
if (typeof this !== "function") {
// closest thing possible to the ECMAScript 5 internal IsCallable function
throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");
}
var aArgs = Array.prototype.slice.call(arguments, 1),
fToBind = this,
fNOP = function () {},
fBound = function () {
return fToBind.apply(this instanceof fNOP
};
fNOP.prototype = this.prototype;
fBound.prototype = new fNOP();
return fBound;
};
}
看懂这段代码需要点功底,我只是知道如何拿来用,如果哪位大牛有兴趣能够介绍一下这段源码的原理,不胜感激,谢谢!
单纯不是什么态度,而是一种满足。 您可能感兴趣的文章:让IE8浏览器支持function.bind()方法Function.prototype.bind用法示例javascript中的Function.prototye.bind深入理解JS中的Function.prototype.bind()方法jQuery中的.bind()、.live()和.delegate()之间区别分析JQuery中绑定事件(bind())和移除事件(unbind())JQuery中Bind()事件用法分析jQuery事件绑定on()、bind()与delegate() 方法详解浅谈javascript中call()、apply()、bind()的用法关于Function中的bind()示例详解
展开全文阅读
相关内容
-
怎么用ie浏览器打开网页(IE浏览器常用快捷键)
怎么用ie浏览器打开网页(IE浏览器常用快捷键),标签,快捷键,标...
-
IE浏览器单独写CSS样式的几种方法
IE浏览器单独写CSS样式的几种方法,浏览器,条件,维护,复制,注...
-
教你通过命令行完美完全的卸载IE浏览器(IE9、IE
教你通过命令行完美完全的卸载IE浏览器(IE9、IE10、IE11),卸...
-
IE不能上网浏览的常见原因和解决方法
IE不能上网浏览的常见原因和解决方法,解决方法,命令,文件,原...
-
把Windows 系统中的IE8浏览器降为IE6的方法
把Windows 系统中的IE8浏览器降为IE6的方法,方法,版本号,版本...
-
如何彻底优化IE浏览器 六种设置方法轻松优化你
如何彻底优化IE浏览器 六种设置方法轻松优化你的IE浏览器,方...
-
div层调整z-index属性在IE中无效原因分析及解决
div层调整z-index属性在IE中无效原因分析及解决方法,无效,原...
-
重装windowsXP系统中IE浏览器2步搞定
重装windowsXP系统中IE浏览器2步搞定,浏览器,用户,注册表,步...
-
在IE6/7/8下识别html5标签(让老式浏览器识别htm
在IE6/7/8下识别html5标签(让老式浏览器识别html5),识别,浏览...
-
在Surface中IE浏览器触摸版和桌面版的设置使用
在Surface中IE浏览器触摸版和桌面版的设置使用技巧,设置,桌面...
-
微软从明年1月12日起停止对IE6-IE8浏览器提供技
微软从明年1月12日起停止对IE6-IE8浏览器提供技术支持,技术支...
-
原生js方法document.getElementsByClassName在i
原生js方法document.getElementsByClassName在ie8及其以下的...
-
让ie浏览器支持RGBA颜色标准实现代码
让ie浏览器支持RGBA颜色标准实现代码,支持,浏览器,参数,透明...
-
ie6,ie7,ie8完美支持position:fixed的终极解决
ie6,ie7,ie8完美支持position:fixed的终极解决方案,支持,完美...
-
ie placeholder属性的兼容性问题解决方法
ie placeholder属性的兼容性问题解决方法,解决方法,属性,失去...