javascript中,我们预想的this指向,有时候与预期不一样,直接上经典例子

    window.name=2;
    var test={
'name':1,
'getName':function(){
     console.log(this.name);//输出1
return function(){
  console.log(this.name);//输出2
}
}
} test.getName()();

  上面为最经典的一个this指向解析案例,第一个this指向test对象,第二个this指向window全局对象,第一个console运行的是test对象里面的方法 ,第二个console运行的是一个匿名函数(也可以称为普通函数)在JavaScript中普通函数的this指向的是全局对象的,上面字面量的创建test对象隐含着new关键词,整个test是一个新的对象,getName属于test里面的方法,this会指向test对象,而getName里面return的函数,属于一个普通函数,这个函数里的this会指向window全局,

ps:其实还可以用闭包的解析,我个人觉得如果这个没弄明白,再提闭包会让人更加迷惘。

假设你想把第二对象指向test,可以使用call在调用时候改变

      window.name=2;
    var test={
'name':1,
'getName':function(){
              console.log(this.name);
return function(){
console.log(this.name);
}
}
} test.getName().call(test); //输出1,1
test.getName().apply(test); //输出1,1

还有一个改变this对象的方法,在test里面的方法嵌套函数之前,先把test对象(指向test的this)用变量的方式保存下来,下面的案例代码

      window.name=2;
    var test={
'name':1,
'getName':function(){
var that=this;//预先把指向test的this保存到that变量中
     console.log(this.name);//输出1
return function(){
console.log(that.name);//输出1
}
}
} test.getName()();

你不知道的this指向的更多相关文章

  1. 《你不知道的JavaScript》整理(二)——this

    最近在读一本进阶的JavaScript的书<你不知道的JavaScript(上卷)>,这次研究了一下“this”. 当一个函数被调用时,会创建一个活动记录(执行上下文). 这个记录会包含函 ...

  2. 你不知道的JavaScript上卷笔记

    你不知道的JavaScript上卷笔记 前言 You don't know JavaScript是github上一个系列文章   初看到这一标题的时候,感觉怎么老外也搞标题党,用这种冲突性比较强的题目 ...

  3. 读书笔记-你不知道的JavaScript(上)

    本文首发在我的个人博客:http://muyunyun.cn/ <你不知道的JavaScript>系列丛书给出了很多颠覆以往对JavaScript认知的点, 读完上卷,受益匪浅,于是对其精 ...

  4. 翻译连载 | 第 11 章:融会贯通 -《JavaScript轻量级函数式编程》 |《你不知道的JS》姊妹篇

    原文地址:Functional-Light-JS 原文作者:Kyle Simpson-<You-Dont-Know-JS>作者 关于译者:这是一个流淌着沪江血液的纯粹工程:认真,是 HTM ...

  5. JavaScript中的this(你不知道的JavaScript)

    JavaScript中的this,刚接触JavaScript时大家都在大肆渲染说其多么多么的灵巧重要,然而自己并不关心:随着自己对JavaScript一步步深入了解,突然恍然大悟,原来它真的很重要!所 ...

  6. 《你不知道的 JavaScript 上卷》 学习笔记

    第一部分: 作用域和闭包 一.作用域 1. 作用域:存储变量并且查找变量的规则 2. 源代码在执行之前(编译)会经历三个步骤: 分词/此法分析:将代码字符串分解成有意义的代码块(词法单元) 解析/语法 ...

  7. 你不知道的JavaScript--Item1 严格模式

    本文转自[阮一峰博客]:http://www.ruanyifeng.com/blog/2013/01/javascript_strict_mode.html 一.概述 除了正常运行模式,ECMAscr ...

  8. 你不知道的JavaScript--Item21 漂移的this

    而在 JavaScript 中,this 是动态绑定,或称为运行期绑定的,这就导致 JavaScript 中的 this 关键字有能力具备多重含义,带来灵活性的同时,也为初学者带来不少困惑.本文仅就这 ...

  9. 你不知道的JavaScript--Item19 执行上下文(execution context)

    在这篇文章里,我将深入研究JavaScript中最基本的部分--执行上下文(execution context).读完本文后,你应该清楚了解释器做了什么,为什么函数和变量能在声明前使用以及他们的值是如 ...

随机推荐

  1. Django 静态文件配置(static files)

    Django version: 1.9 Python versrion: 3.5.2 这几天Django配置静态文件(本例是要加载index.css), 总是不对,最后终于试对了,这里记录下,方便以后 ...

  2. .Net 连接字符串的解释

    https://msdn.microsoft.com/zh-cn/library/cc716756.aspx 连接字符串参数 连接字符串的格式是使用分号分隔的键/值参数对列表: keyword1=va ...

  3. qt之mapx组件编程c2248和c2512错误

    mapx组件利用qt工具dumpcpp到处头文件和.cpp文件后将其加入到新建的qt项目中即可. 不过本人遇到问题知道今天偶然的解决了.记下来,以免忘记. demo的项目结构如下: 然后在.pro文件 ...

  4. 【练习】移动数据---解决null值

    1.创建数据文件: [oracle@host03 ~]$ vi base_data.dat ,zhangfei,zhangyide ,guanyu,guanyunchang ,liubei,liuxu ...

  5. java 配置文件读取

    1.getResourceAsStream Class.getClassLoader.getResourceAsStream(String path) :默认则是从ClassPath根下获取,path ...

  6. CentOS 7部署OpenStack(二)—安装keystone服务

    1.创建数据库 [root@controller ~]# mysql -u root -p [root@controller ~]# CREATE DATABASE keystone; [root@c ...

  7. 删除数组中重复的元素(JSON)

    先上一个基础的: var a = [1,2,3,3,4]; var b = []; for (var i = 0; i < a.length; ++i) { if (b.indexOf(a[i] ...

  8. Java线程:概念与原理

    Java线程:概念与原理 一.操作系统中线程和进程的概念 现在的操作系统是多任务操作系统.多线程是实现多任务的一种方式. 进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程 ...

  9. 2015-08-26: GCC编译选项(转载)

    gcc提供了大量的警告选项,对代码中可能存在的问题提出警告,通常可以使用-Wall来开启以下警告:           -Waddress -Warray-bounds (only with -O2) ...

  10. html显示时间

    <html> <head> <script type="text/javascript"> function time() { var time ...