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. Java基础知识:代理

    一.代理的概念 动态代理技术是整个java技术中最重要的一个技术,它是学习java框架的基础,不会动态代理技术,那么在学习Spring这些框架时是学不明白的. 动态代理技术就是用来产生一个对象的代理对 ...

  2. StackPanel在增加控件的问题

    今天遇到这样一个问题,就是我做了一个自定义控件.然后加到StackPanel中, <StackPanel Height="676" HorizontalAlignment=& ...

  3. PL/SQL使用技巧

    1.如何在PL/SQL developer中查看所连接的oracle的版本答:select * from v$version;或者在pl/sql developer 里查看[Reports]——> ...

  4. 如何获取TypedArray?

    当我们需要自定义控件的时候经常会使用到TypedArray这个类,使用完之后必须调用recycler()函数.... 但是如何获取呢? 有如下几个方式: context(实际最后调用的是context ...

  5. python面向对象编程

    面向对象编程,简称OOP, object oriented programming OOP编程的三大特性:封装,继承,多态 1. 封装 把功能的实现细节封装起来,不对外暴露.只留出入接口. 2. 继承 ...

  6. Ninject之旅之十一:Ninject动态工厂(附程序下载)

    摘要 如果我们已经知道了一个类所有的依赖项,在我们只需要依赖项的一个实例的场景中,在类的构造函数中引入一系列的依赖项是容易的.但是有些情况,我们需要在一个类里创建依赖项的多个实例,这时候Ninject ...

  7. VA的自动补全Snippet

    开始旅程 如果您想要自定义补全,比如在使用UE4框架时,想输入一个方法的注释模板,可以这么做. 方法1:点击VAssistX -> insert VA Snippet -> Edit VA ...

  8. JS循环往table中写入行

    < script > $(function() { $('#test').click(function() { $.ajax({ url: '__APP__/Article/jsonTes ...

  9. 1.使用Entity Framwork框架常用的技术手段Code First 和Reverse Engineer Code First

    提示:VS版本2013,  Entity Framwork版本5.0.0,Mysql数据库  使用Entity FrameWork的好处就不多说,直接上手如何使用.两种形式:1.将代码映射到数据库实体 ...

  10. java小白来报道

    即将开启我的搬码生涯,奋斗吧,少年!