4-js基础讲解this篇
什么是this?
在函数内部有一些特殊的对象,其中有arguments和this等,其中this对象是在运行时基于函数的运行环境绑定的
通过这个简单的定义我们知道两点1、this是函数内部的对象,即普通对象内部不存在this 2、this对象是会根据运行环境变化的 那么怎么变化的呢?基本原则就是这样 在全局函数中,this等同于window,而当函数被作为某个对象的方法调用时,this指代了那个对象 接下来以上面的基本原则为基准通过下面的几个常见情况 来介绍实际情况中this的指代情况。
指代案例
指代window
1.全局作用域的this一般指向全局对象,在浏览器中这对象就是window,在node中这对象就是global。
2.非严格模式下的全局函数内部
3.普通对象没有this
看下面的例子会加深下理解
这种情况一般的使用场景就是在写传统的html页面时 在每个页面的script标签内写js时会遇到 遇到时不要搞混。
指代调用对象本身
作为对象方法的函数中的this
这里得调用对象是o 所以this就只想o本身
再通过一个例子来加深理解
因为是o.b这个对象调用了fn所以this指向a.b
再来一个复杂例子
很好理解其实,j是一个新得变量,指代fn(内存种指向fn得地址) 调用fn得是还是window
apply 调用
apply()
是函数的一个方法,作用是改变函数的调用对象。它的第一个参数就表示改变后的调用这个函数的对象。因此,这时this
指的就是这第一个参数。apply()
的参数为空时,默认调用全局对象。例子如下:
```javascript
var x = 0;
function test() {
console.log(this.x);
}
var obj = {}; obj.x = 1; obj.m = test; obj.m.apply() // 0
obj.m.apply(obj); //1
原理: 为什么this会指向a?首先new关键字会创建一个空的对象,然后会自动调用一个函数apply方法,将this指向这个空对象,这样的话函数内部的this就会被这个空的对象替代。 4. 箭头函数 箭头函数没有自己本身得this,而是再定义它时,包裹它得函数得this
原理:箭头函数转成 ES5 的代码如下:
上面代码中,转换后的 ES5 版本清楚地说明了,箭头函数里面根本没有自己的this
,而是引用外层的this
。
总结
参考文献
Last updated
Was this helpful?