javascript入门:this的规则与bind的各种风骚用法

发布时间:2016-12-31 7:25:46编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"javascript入门:this的规则与bind的各种风骚用法 ",主要涉及到javascript入门:this的规则与bind的各种风骚用法 方面的内容,对于javascript入门:this的规则与bind的各种风骚用法 感兴趣的同学可以参考一下。

javascript的任何函数的作用域中都有一个this变量。理解这个this变量才能正确地编写javascript程序,正确使用javascript的各种功能。

this变量是这样确定的:

1 如果函数未调用过bind:

  a. 使用点运算符调用,等于调用时左边的点运算符左边的对象。

  b. 不使用点运算符调用,等于window。

2 如果函数调用过了bind:

  a. 通过new调用,等于新的对象(this)。

  b. 不通过new调用,

    1) 绑定时最左边参数为null或undefined,等于window

    2) 绑定时最左边参数非null,必然等于该参数

bind的作用是从左到右为函数绑定参数。绑定的第一个参数总是null。这个函数本质上会返回一个闭包,因此能够可靠的保存下调用上下文。

msdn给出了一个bind的实现,这里稍作注释:

Function.prototype.bind = function(oThis) {      //只有一个参数,事实上可以有变化个数,在函数中会处理   if(typeof this !== 'function') {     //确保bind是对function调用,而不是其他对象throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable'); } var fSlice = Array.prototype.slice;aArgs = fSlice.call(arguments, 1);    //把除了重定义this的其他参数拿出来 fToBind = this;fNOP = function() {};            //它存在的意义完全是处理用new调用bind后函数的情况fBound = function() { return fToBind.apply(this instanceof fNOP ? this : oThis || window,   aArgs.concat(fSlice.call(arguments)));     //重新定义this,如果this 是fNOP说明正在用new调用,则不使用bind的this,因为此时这个函数是作为新对象的构造函数}; fNOP.prototype = this.prototype; fBound.prototype = new fNOP();       //相当于定义了一个原函数的子类return fBound; };


上一篇:Online, Asynchronous Schema Change in F1
下一篇:x:bind不支持样式文件 或 此Xaml文件必须又代码隐藏类才能使用{x:Bind} 解决办法

相关文章

相关评论

本站评论功能暂时取消,后续此功能例行通知。

一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!

二、互相尊重,对自己的言论和行为负责。

好贷网好贷款