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

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

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

2.作为普通函数调用。

3.构造器调用。

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

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

1.作为对象的方法调用

         var obj = {
value: 1,
getValue: function() {
console.log(this === obj);//输出 true
console.log(this.value); //输出 1
}
};
obj.getValue();

2.作为普通函数调用

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

         window.name = "michael";
var obj = {
name:"tom",
getName:function() {
return this.name;
}
};
var getName = obj.getName;
console.log(getName()); //输出 michael

3.构造器调用

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

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

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

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

上述情况需要特殊注意.

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

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

         var obj = {
name:"michael",
getName:function() {
return this.name;
}
};
var obj2 = {
name:"tom"
};
console.log(obj.getName()); //输出 michael
console.log(obj.getName.call(obj2)); //输出 tom

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

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

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

分享点干货(此this非彼this)this的详细解读的更多相关文章

  1. 如何走上更高平台分享传递干货知识:(开通个人Github面向开源及私有软件项目的托管平台:https://github.com/zlslch/)(图文详解)(博主推荐)

    不多说,直接上干货! https://github.com/ 欢迎大家,加入我的微信公众号:大数据躺过的坑        人工智能躺过的坑       同时,大家可以关注我的个人博客:    http ...

  2. 分享原创可复用且非侵入性代码生成工具(for .net)

    入行IT十年了,这是本人第一次网上’献丑‘.迫于工作压力,花了大半年时间写了这个生成器以辅助开发.如有价值请多多给予建议,谢谢 好了,废话少说,开动! QA. 1.为什么要用代码生成器? 当然是为了快 ...

  3. 今日分享一点干货。PHP中课程表的实现。

    首先贴代码,代码贴完再细说: 前段HTML: <div id="studentRead" class="reading" style="z-in ...

  4. iOS社会化分享(干货)

    一.苹果原生集成的社会化分享 1.哪些平台 (1)Twitter (2)FaceBook (3)Flickr (4)Vimeo (5)新浪微博  :iOS6 (6)腾讯微博 : iOS7 2.框架 : ...

  5. uni-app开发经验分享二十: 微信小程序 授权登录 获取详细信息 获取手机号

    授权页面 因为微信小程序提供的 权限弹窗 只能通用户确认授权 所以可以 写一个授权页面,让用户点击 来获取用户相关信息 然后再配合后台就可以完成登录 <button class="bt ...

  6. .net xml 增删改查基础复习及干货分享

    今天做做项目时,有一个需求需要用到一些固定的文本数据,觉得将这些需要存储的信息直接写在代码里很不友好,放在数据库中存储又觉得不够方便,自然就想到了使用xml来进行操作,我平常在项目中其实用到xml的机 ...

  7. 干货: 可视化项目实战经验分享,轻松玩转 Bokeh (建议收藏)

    作者 | Will Koehrsen 翻译 | Lemon 译文出品 | Python数据之道 (ID:PyDataRoad) 本文通过一个项目案例,详细的介绍了如何从 Bokeh 基础到构建 Bok ...

  8. 干货分享:Essay写作收集论据的三个方法

    在很多时候,中国留学生写出的Essay在西方学术界看来是存在plagiarism的情况.并不是说咱们写的所有东西都是抄袭,而是思维逻辑和利用证据的方式与西方权威的academic writing不同. ...

  9. 一文读懂阻塞、非阻塞、同步、异步IO

    介绍 在谈及网络IO的时候总避不开阻塞.非阻塞.同步.异步.IO多路复用.select.poll.epoll等这几个词语.在面试的时候也会被经常问到这几个的区别.本文就来讲一下这几个词语的含义.区别以 ...

随机推荐

  1. hdoj3183【思维】

    思路: 处理方案非常霸气啊,无奈想不到. 说是n位去m个,那么默认就是取了n-m个数字,ok,然后m #include <iostream> #include <stdio.h> ...

  2. PTA 模拟【string以及字母->数组下标】

    假设有九宫格输入法键盘布局如下: [ 1,.?! ] [ 2ABC ] [ 3DEF ] [ 4GHI ] [ 5JKL ] [ 6MNO ] [ 7PQRS ] [ 8TUV ] [ 9WXYZ ] ...

  3. bzoj 4044: [Cerc2014] Virus synthesis【回文自动机+dp】

    建回文自动机,注意到一个回文串是可以通过一个长度小于等于这个串长度的一半的回文串添上一些字符然后复制得到的,也就是在自动机上向fa走,相当于treedp 每次都走显然会T,记录一个up,指向祖先中最下 ...

  4. IT兄弟连 JavaWeb教程 ServletContext对象

    ServletContext是Servlet与Servlet容器之间直接通信的接口.Servlet容器在启动一个Web应用时,会为它创建一个ServletContext对象.每个Web应用都有唯一的S ...

  5. HDFS Java API

    HDFS Java API 搭建Hadoop客户端与Java访问HDFS集群

  6. Helvetic Coding Contest 2017 online mirror (teams allowed, unrated) M

    Description The marmots have prepared a very easy problem for this year's HC2 – this one. It involve ...

  7. python函数基础(3)

    第1章 编码补充 1.1 字符编码对照表 1.2 编码特性 1.4 encode/decode第2章 集合 2.1 特点 2.2 [重点]作用:去重 2.3 常用操作 2.3.1 删除 2.3.2 交 ...

  8. servlet生命周期:

    Servlet生命周期分为三个阶段: 1,初始化阶段  servlet实例创建时调用init()方法,在Servlet的整个生命周期内,init()方法只被调用一次. 2,响应客户请求阶段 调用ser ...

  9. 前端打印console

    很多时候,我们都想知道,是否已经选中或得到数据时,我们可以利用console 打印出来.console有几种方式使用.具体有: console.log($scope.getParkId); conso ...

  10. T4308 数据结构判断

    https://www.luogu.org/record/show?rid=2143639 题目描述 在世界的东边,有三瓶雪碧. ——laekov 黎大爷为了虐 zhx,给 zhx 出了这样一道题.黎 ...