正常模式

在正常模式下独立函数的的 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. java web学习总结(二十六) -------------------JSP属性范围

    所谓的属性范围就是一个属性设置之后,可以经过多少个其他页面后仍然可以访问的保存范围. 一.JSP属性范围 JSP中提供了四种属性范围,四种属性范围分别指以下四种: 当前页:一个属性只能在一个页面中取得 ...

  2. PowerDesigner 常用设置

    1.使用 JDBC 方式连接 Oracle 逆向生成数据库 PDM 使用 ODBC 方式连接 Oracle 数据库可以借鉴这位兄弟的博客:http://www.cnblogs.com/clivehua ...

  3. 菜鸟快飞之JavaScript对象、原型、继承(一)

    有前辈说过,在JavaScript中,一切皆对象.由此可见,作为JavaScript的核心之一,对象是有多么重要.虽然今天走亲戚有点累,但还是得写写这个对象,免得吃几天好的,就又忘光了. 1.创建对象 ...

  4. 传统软件和SaaS,差异究竟在哪里

    这篇文章从创业起步阶段.产品形态和产品策略.市场竞争格局三个方面比较了中美 SaaS 领域的异同,在文章的最后,作者根据自己在 Box 的工作经历对在国内做 SaaS 的公司提出了四点建议. 我曾有幸 ...

  5. Effective Java笔记一 创建和销毁对象

    Effective Java笔记一 创建和销毁对象 第1条 考虑用静态工厂方法代替构造器 第2条 遇到多个构造器参数时要考虑用构建器 第3条 用私有构造器或者枚举类型强化Singleton属性 第4条 ...

  6. 一位资深程序员大牛给予Java初学者的学习路线建议

    java学习这一部分其实也算是今天的重点,这一部分用来回答很多群里的朋友所问过的问题,那就是我你是如何学习Java的,能不能给点建议?今天我是打算来点干货,因此咱们就不说一些学习方法和技巧了,直接来谈 ...

  7. 解决adobe air sdk打包 apk后自动在包名前面加上air. (有个点)前缀的问题

    早就找到了这个方法,但是一直忙没心思写博客. 默认情况下,所有 AIR Android 应用程序的包名称都带 air 前缀.若不想使用此默认行为,可将计算机环境变量 AIR_NOANDROIDFLAI ...

  8. jQuery 获取 radio 选中后的文字

    如果html为 <input type="radio" id="test" name="test" value="1&quo ...

  9. js 的 protype 小总结

    这里是对该文的总结: 1.Javascript中对象的prototype属性的解释是:返回对象类型原型的引用.   2.原型法的主要思想是,现在有1个类A,我想要创建一个类B,这个类是以A为原型的,并 ...

  10. 必杀技———SQL基础整理系列(一)

    SQL(Structured Query Language)——结构化查询语言 SQL语言的组成部分 数据定义语言 (DDL:Data Definition Language) 负责数据结构定义与数据 ...