javascript this机制的四种使用规则
来源:互联网 发布:搜狗拼音输入法云计算 编辑:程序博客网 时间:2024/06/09 21:08
this永远指向调用者。
this到底绑定或者引用的是哪个对象环境决定于函数被调用的地方。而函数的调用有不同的方式,在不同的方式中调用决定this引用的是哪个对象是由四种规则确定的。我们一个个来看。
1. 默认绑定全局变量
这条规则是最常见的,也是默认的。当函数被单独定义和调用的时候,应用的规则就是绑定全局变量。如下:
function fn() { console.log( this.a );}var a = 2;fn(); // 2 -- fn单独调用,this引用window
2. 隐式绑定
隐式调用的意思是,函数调用时拥有一个上下文对象,就好像这个函数是属于该对象的一样。例如:
function fn() { console.log( this.a );}var obj = { a: 2, fn: fn};obj.fn(); // 2 -- this引用obj。
需要说明的一点是,最后一个调用该函数的对象是传到函数的上下文对象。如:
function fn() { console.log( this.a );}var obj2 = { a: 42, fn: fn};var obj1 = { a: 2, obj2: obj2};obj1.obj2.fn(); // 42 -- this引用的是obj2.
还有一点要说明的是,失去隐式绑定的情况,如下:
function fn() { console.log( this.a );}var obj = { a: 2, fn: fn};var bar = obj.fn; // 函数引用传递var a = "全局"; // 定义全局变量bar(); // "全局"
如上,第8行虽然有隐式绑定,但是它执行的效果明显是把fn赋给bar。这样bar执行的时候,依然是默认绑定全局变量,所以输出结果如上。
3. 显示绑定
学过bind()\apply()\call()函数的都应该知道,它接收的第一个参数即是上下文对象并将其赋给this。看下面的例子:
function fn() { console.log( this.a );}var obj = { a: 2};fn.call( obj ); // 2
如果我们传递第一个值为简单值,那么后台会自动转换为对应的封装对象。如果传递为null,那么结果就是在绑定默认全局变量,如:
function fn() { console.log( this.a ); } var obj = { a: 2 };var a = 10;fn.call( null); // 10
4. new新对象绑定
如果是一个构造函数,那么用new来调用,那么绑定的将是新创建的对象。如:
function fn(a) { this.a = a;}var bar = new fn( 2 );console.log( bar.a );// 2
注意,一般构造函数名首字母大写,这里没有大写的原因是想提醒读者,构造函数也是一般的函数而已。
阅读全文
0 0
- javascript this机制的四种使用规则
- js this机制的四种规则
- javascript的函数上下文this四条规则
- Javascript中this的四种使用场景
- JavaScript中的this关键字使用的四种调用模式
- javascript中this的四种用法
- javascript中this的四种用法
- javascript中this的四种用法
- javascript中this的四种用法
- javascript中this的四种用法
- javascript的this使用
- 【javascript】函数中的this的四种绑定形式
- JavaScript函数调用的四种模式之this
- javascript 函数中的 this 的四种绑定形式
- JavaScript四种调用模式和this
- javascript中this的使用
- JavaScript中this的使用
- JavaScript中this的使用
- android doubl 限制两位小数
- Qt之http通讯简单用法 /编写必应主页小爬虫,获取当日壁纸
- ssh某些用户登录不到服务器
- react native 混合开发代码示例
- [C++] 基类一定要定义虚析构函数
- javascript this机制的四种使用规则
- ARP脚本
- 递归
- VS2013 / MFC + OpenCV 2.4.9实现视频的播放暂停和结束
- php 返回当前脚本所在在的路径。
- CM集群搭建遇到问题
- 设计模式-备忘录模式
- js--闭包
- 【建模必备】遗传算法的基本原理与步骤(编码/解码)