分享点干货(此this非彼this)this的详细解读

Posted liucldq

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分享点干货(此this非彼this)this的详细解读相关的知识,希望对你有一定的参考价值。

javascript编程中,this关键字经常让初学者感到迷惑,这里,针对此this根据查阅的资料和个人的理解分享一下,纯手打,大神勿喷。

首先先说一下this的指向,大致可以分为以下四种。

1.作为对象的方法调用。

2.作为普通函数调用。

3.构造器调用。

4.Function.prototype.call或者是Function.prototype.apply调用。

这四种调用很重要,如果能彻底理解了,应该不会再对这个this感到迷惑了。

1.作为对象的方法调用

1         var obj = {
2             value: 1,
3             getValue: function() {
4                 console.log(this === obj);//输出 true
5                 console.log(this.value); //输出 1
6             }
7         };
8         obj.getValue();

2.作为普通函数调用

当函数不作为对象的属性被调用时,也就是普通的函数调用方式,通常来讲,this是指向全局对象的,在浏览器里,也就是window对象。

1         window.name = "michael";
2         var obj = {
3             name:"tom",
4             getName:function() {
5                 return this.name;
6             }
7         };
8         var getName = obj.getName;
9         console.log(getName()); //输出  michael

 

 3.构造器调用

除了宿主提供的一些内置函数,大部分的javascript函数可以当构造器来使用,它和普通函数的区别在于被调用的方式。当使用new来调用的时候,通常是返回一个对象,构造器里的this就指向这个返回的对象。

1         var myClass = function(){
2             this.name = "michael";
3         };
4         var obj = new myClass();
5         console.log(obj.name);// 输出michael

 

但是,使用new调用的时候,还需要注意这样一个问题,如果构造器显式返回一个object类型的对象的时候,那么这次最终返回的是这个对象,而不是this.

1         var myClass = function(){
2             this.name = "michael";
3             return {//显式返回一个对象
4                 name:"tom"
5             };
6         };
7         var obj = new myClass();
8         console.log(obj.name);// 输出tom

 

上述情况需要特殊注意.

4.Function.prototype.call或者是Function.prototype.apply调用

 与第二种普通函数调用相比,call或者apply可以动态改变this的指向,听着蛮高大上的。

 1         var obj = {
 2             name:"michael",
 3             getName:function() {
 4                 return this.name;
 5             }
 6         };
 7         var obj2 = {
 8             name:"tom"
 9         };
10         console.log(obj.getName()); //输出  michael
11         console.log(obj.getName.call(obj2)); //输出  tom

 

通过代码分析来看,显然this的指向已经人为的改变了。

以上就是关于this的一点小小的分享。

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

 

   

以上是关于分享点干货(此this非彼this)this的详细解读的主要内容,如果未能解决你的问题,请参考以下文章

白鹭三剑客TypeScript 中的 this指向问题

有关 java 重写equals 方法, 判断两个点是不是相同,求高手详细解答,谢谢!!!!!

干货分享:微信支付+自助点餐+裂变分享+互动营销=智能餐桌?来看智能餐桌如何完成自助化用餐服务!

#yyds干货盘点#ES6的this指向哪里

vue.js-过滤器 filters使用详细示例

前端中的this,指的是什么?