this的用法
  在函数中this到底取何值,是在函数真正被调用执行的时候确定的,函数定义的时候确定不了.

  因为this的取值是执行上下文环境的一部分,每次调用函数,都会产生一个新的执行上下环境.举例说明

1. 构造函数之this

  function Foo() {
      this.name = "zhangsan";
      this.age = 20;
      console.log(this);
  }
  var f1 = new Foo();

说明:
 1. 如果函数作为构造函数使用,那么其中的this就代表它new出来的对象
 2. 如果函数作为普通函数调用,这种情况this是指window.

  function Foo() {
      this.name = "zhangsan";
      this.age = 20;
      console.log(this);
  }
  Foo();
  console.log(window.name);
  console.log(window.age);

2. 函数作为对象的一个属性
  如果函数作为对象的一个属性时,并且作为对象的一个属性被调用时,函数中的this指向该对

  var obj = {
      x:10,
      fn:function() {
          console.log(this.x);
      }
  };
  obj.fn();

  var obj = {
      x:10,
      fn:function() {
          console.log(this.x);
      }
  };
  var obj1 = {
      x:20
  };
  obj1.fn = obj.fn;
  obj1.fn();

3. 函数用call或apply调用
  当一个函数被call和apply调用时,this的值就去传入的对象的值

  var test = "Tony";
  function doSomething() {
      console.log(this.test);
  }
  var obj = {
      test:"Tom"
  };
  doSomething();
  doSomething.call(obj);//doSomething中的this指向obj

4. 全局&普通函数的调用
  在全局环境下,this指向的是window对象

    console.log(this === window);//true

  普通函数调用时,其中的this也是指向的window对象

  var x = 10;
  var fn = function() {
      console.log(this);//window
      console.log(this.x);//10
  };
  fn();
注意以下情况:虽然函数f是在obj对象内部定义的,但是他任然是一个普通函数,this指向的还是window对象.

  var x = 20;
  var obj = {
      x:10,
      fn:function() {
          function f() {
              console.log(this);
              console.log(this.x);
          }
          f();
      }
  };
  obj.fn();

5. 构造函数prototype
  this代表的是当前对象的值,不仅仅是在构造函数的prototype,即便是在整个原型链中.

  function Fn(name, age) {
      this.name = name;
      this.age = age;
  }
  Fn.prototype.sayName = function() {
      console.log(this.name);
  };
  var f1 = new Fn("zhangsan", 20);
  console.log(f1.name);

了解神奇的this的更多相关文章

  1. BZOJ 1006 【HNOI2008】 神奇的国度

    题目链接:神奇的国度 一篇论文题--神奇的弦图,神奇的MCS-- 感觉我没有什么需要多说的,这里简单介绍一下MCS: 我们给每个点记录一个权值,从后往前依次确定完美消除序列中的点,每次选择权值最大的一 ...

  2. 前端精选文摘:BFC 神奇背后的原理

    BFC 已经是一个耳听熟闻的词语了,网上有许多关于 BFC 的文章,介绍了如何触发 BFC 以及 BFC 的一些用处(如清浮动,防止 margin 重叠等).虽然我知道如何利用 BFC 解决这些问题, ...

  3. MVC系列——MVC源码学习:打造自己的MVC框架(四:了解神奇的视图引擎)

    前言:通过之前的三篇介绍,我们基本上完成了从请求发出到路由匹配.再到控制器的激活,再到Action的执行这些个过程.今天还是趁热打铁,将我们的View也来完善下,也让整个系列相对完整,博主不希望烂尾. ...

  4. 一行神奇的javascript代码

    写本篇文章的缘由是之前群里@墨尘发了一段js代码,如下: (!(~+[])+{})[--[~+""][+[]]*[~+[]] + ~~!+[]]+({}+[])[[~!+[]]*~ ...

  5. [翻译svg教程]Path元素 svg中最神奇的元素!

    先看一个实例 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999 ...

  6. php isset( $test ) 的神奇之处。

    很久一段时间没更新博客了,由于近段时间一直在忙 挑战杯 的项目,所以没怎样把一些总结放上来.这次,总结下 php 的一个 函数 : boolean isset($test), 返回值:boolean类 ...

  7. 神奇的CSS3按钮特效

    点击这里查看效果 以下是源代码: <!doctype html> <html> <!-- author: @simurai --> <head> < ...

  8. 吉特仓库管理系统- 斑马打印机 ZPL语言的腐朽和神奇

    上一篇文章说到了.NET中的打印机,在PrintDocument类也暴露一些本质上上的问题,前面也提到过了,虽然使用PrintDcoument打印很方便.对应条码打印机比如斑马等切刀指令,不依赖打印机 ...

  9. JS开发HTML5游戏《神奇的六边形》(一)

    近期出现一款魔性的消除类HTML5游戏<神奇的六边形>,今天我们一起来看看如何通过开源免费的青瓷引擎(www.zuoyouxi.com)来实现这款游戏. (点击图片可进入游戏体验) 因内容 ...

  10. 神奇的sort()函数

    今天来谈一谈sort()函数,sort() 方法用于对数组的元素进行排序,用法为arrayObject.sort(sortby):括号中的为可选参数,准确来说应该是一个函数,这个函数用来规定排序方法, ...

随机推荐

  1. [原创]Windows下Google V8 javascript引擎编译

    项目用到将v8嵌入到C++的情况,公司没时间研究,只有在家研究,编译过程一堆坑.记录一下. 网上百度的都是基于vs2010,或者早版本的v8编译,最新版本应该使用vs2013\vs2015.本文介绍的 ...

  2. MySQL忘记了密码登录不进去,用命令符修改新的密码重新登录的方法

    MySQL忘记了密码登录不进去,用命令符修改新的密码重新登录的方法: 1.备份my.ini 2.在my.ini字段里 [mysqld] #socket=mysql skip-grant-tables ...

  3. PHP记录点击数方法

    1.第一种方法: $id = $_GET['id']; //获取文章ID $sql = "UPDATE base SET hits = hits+1 WHERE id = '$id'&quo ...

  4. redis怎么动态添加内存,动态配置,无需重启。

    在redis的使用过程中,有时候需要急需修改redis的配置,比如在业务运行的情况下,内存不够怎么办,这时要么赶紧删除无用的内存,要么扩展内存.如果有无用的内容可删除那么所有问题都已经解决.如果内容都 ...

  5. C语言基础11

    函数指针的定义: 函数类型 (标识符 指针变量名)(形参列表) void  printHello( ); void printHello( ){ printf("hello world!!! ...

  6. android---EditText黄色边框

    http://liuzhichao.com/p/612.html 自定义android控件EditText边框背景 柳志超博客 » Program » Andriod » 自定义android控件Ed ...

  7. 一种全新的MEMS开关——高性能、快速、低能耗以及双稳态

    这种开关最早由申军教授和研究生阮梅春发明,研究生埃里克·朗格卢瓦在简化结构和缩小尺寸上作了探索,黄志林用相同原理做出了MEMS光学镜子开关,曹志良改变设计.材料和工艺后制作出了能同步开关的矩阵.这种M ...

  8. ZigBee技术简介

    Zigbee的由来 在蓝牙技术的使用过程中,人们发现蓝牙技术尽管有许多优点,但仍存在许多缺陷.对工业,家庭自动化控制和遥测遥控领域而言,蓝牙技术显得太复杂,功耗大,距离近,组网规模太小等,……而工业自 ...

  9. 蜂鸟A20开发板刷 cubietruck 的 SD 卡固件

    美睿视讯 为蜂鸟A20准备的 MerriiLinux 功能非常简陋.所以能用上主流的 debian 或者 LUbuntu 就可以说是非常迫切的需求了.蜂鸟A20(Merrii Hummingbird ...

  10. OpenGL研究2.0 计算圆

    OpenGL研究2.0 计算圆 DionysosLai2014-06-18 在游戏中.常常有些地方涉及到一些圆的轨迹计算,例如一些转轴类的游戏,人物一般在角色转轴上面运动.这时,我们就要时刻计算角色的 ...