正常模式

在正常模式下独立函数的的 this 指向 undefined window。

<script type="text/javascript">
function func() {
return this.name;
} var arg = {
name: 'xxx',
age: 20,
}; r = func();
alert(r); </script>

说明:

这段代码的执行,会弹出没有内容的空白框,func中的this默认的window,但是window中并没定义name变量,所以获取不到

如果代码是这样的便能获取:

<script type="text/javascript">
var name = 'ooo';
function func() {
return this.name;
} var arg = {
name: 'xxx',
age: 20,
}; r = func();
alert(r); </script>

说明:

此时我们定义了一个全局变量,变量属于window,所以此时this指向window的name便有值。

strict模式

strict模式下,this的执行是可以控制的,但是要借助函数本身的 apply() call() 方法。

apply()

要指定函数的this指向那个对象。可以使用函数本身的apply方法;这个方法接收2个参数:

  1. 第一个参数就是this指向的对象名。
  2. 可选参数;第二个参数是一个Array,表示函数本身的参数。
<script type="text/javascript">
function func() {
return this.name;
} var arg = {
name: 'xxx',
age: 20,
}; r = func.apply(arg);
alert(r); </script>

apply

结果:

说明:

此时的this指向arg这个对象。

func函数本身没接收参数,所以这里省略了apply的第二个参数。

call()

call()方法和apply()方法很像只是他们接收的第二个参数形式不一样

  • apply()是将参数打包成Array再传入。
  • call()是参数按顺序传入。
<script type="text/javascript">
function func(n) {
return this.name + n;
} var arg = {
name: 'xxx',
age: 20,
}; r = func.call(arg, 'OK');
alert(r); </script>

call

结果:

上面代码如果换成apply():

<script type="text/javascript">
function func(n) {
return this.name + n;
} var arg = {
name: 'xxx',
age: 20,
}; r = func.apply(arg, ['OK', ]);
alert(r); </script>

apply

注意:

apply()方法接收一个参数的时候,在数组中要在第一个参数后面加上逗号” , ”;给予区分。

JS this指向的更多相关文章

  1. 白话js this指向问题

    前言   通过本文,你大概能了解this基础指向的问题,抛开例子去说this太虚幻,这里还是结合几篇博文做个整理,算是个人的记录了. 先说概念,this指向与申明无关,永远指向距离自己最近的最终调用者 ...

  2. 彻底搞懂js this指向问题

    在这里必须要提一句的是,this指向是学习js必须要掌握的(必须),再开始之前先看底部的总结,然后回上面看例子便一目了然. 例子1: function a(){ var user = "Ta ...

  3. JS this指向问题

    <button onclick=(function(){alert(this)})()>I'm button</button>//this指代window <button ...

  4. js this指向理解

    1.如果调用this的函数上级有多个对象,this只会指向上一级对象 下面实例fn函数调用this时,this指向b对象,如果b里面有a属性就输出值: 如果没有就是undefined 在来看下下面的实 ...

  5. JS—-this指向

    箭头函数中this对象就是定义时所在的作用域,也就是说箭头函数本身没有this,内部的this就是外层代码块作用域中的this. 1.独立函数 var a = 0var test = ()=> ...

  6. JS this指向总结

    使用 JavaScript 开发的时候,很多开发者多多少少会被 this 的指向搞蒙圈,但是实际上,关于 this 的指向,记住最核心的一句话:哪个对象调用函数,函数里面的this指向哪个对象. 下面 ...

  7. js this 指向

    JavaScript 作为一种脚本语言身份的存在,因此被很多人认为是简单易学的.然而情况恰恰相反,JavaScript 支持函数式编程.闭包.基于原型的继承等高级功能.由于其运行期绑定的特性,Java ...

  8. js this指向汇总

    this指向 普通函数  window 定时器函数         window 事件函数 事件源 箭头函数 父function中的this,没有就是window 对象函数 对象本身 构造函数 实例化 ...

  9. 可能是史上最强大的js图表库——ECharts带你入门

    PS:之前的那篇博客Highcharts——让你的网页上图表画的飞起 ,评论中,花儿笑弯了腰 和 StanZhai 两位仁兄让我试试 ECharts ,去主页看到<Why ECharts ?&g ...

随机推荐

  1. GJM : Unity3D HIAR 目录导航

    感谢您的阅读.喜欢的.有用的就请大哥大嫂们高抬贵手"推荐一下"吧!你的精神支持是博主强大的写作动力以及转载收藏动力.欢迎转载! 版权声明:本文原创发表于 [请点击连接前往] ,未经 ...

  2. GJM : AlloyTouch实战--60行代码搞定QQ看点资料卡

    原文链接:https://github.com/AlloyTeam/AlloyTouch/wiki/kandian 先验货 访问DEMO你也可以点击这里 源代码可以点击这里 如你体验所见,流程的滚动的 ...

  3. jQuery+css3侧边栏导航菜单

    效果体验:http://hovertree.com/texiao/jquery/37/ 代码如下: <!doctype html> <html lang="zh" ...

  4. canvas学习之API整理笔记(一)

    其实canvas本身很简单,就是去学习它的API,多看实例,多自己动手练习,多总结.但是canvas的API实在是有点多,对于初学者来说,可能学到一半就止步不前了.我也有这种感觉,在学习的过程中,编写 ...

  5. Quartz2D内存管理

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "PingFang SC"; color: #239619 } p.p2 ...

  6. Android面试题(一)

    1. 请描述一下Activity 生命周期. 答: 如下图所示.共有七个周期函数,按顺序分别是: onCreate(), onStart(), onRestart(), onResume(), onP ...

  7. Hibernate 系列 06 - 对象在JVM中的生命周期

    引导目录: Hibernate 系列教程 目录 Java对象通过new命令进行创建,Java虚拟机(Java Virtual Machine,JVM)会为新的Java对象在内存中开辟一个新空间以存放次 ...

  8. IDEA 中scala 程序运行时的错误:报错 test is already defined as object test

    解决办法:在 创建main文件夹和scala文件夹的时候,注意src与这两个文件夹不能同时设置为resources,否则就会产生报错,解决办法将src文件夹的resources取消,右键.

  9. x01.BSheepTree: 树

    数据结构,无外乎三: 1. 一对一,线性表,数组是也: 2. 一对多,树,菜单是也: 3. 多对多,图,网络是也. 涉及到树,有一个平衡的问题,左旋转,右旋转,转得人晕晕乎乎.好在陈广的<数据结 ...

  10. Ubuntu 16.04下Linux驱动编写第一步

    源码环境的搭建 Install源码 >sudo apt-cache search linux-source linux-source - Linux kernel source with Ubu ...