JS this指向
正常模式
在正常模式下独立函数的的 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个参数:
- 第一个参数就是this指向的对象名。
- 可选参数;第二个参数是一个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指向的更多相关文章
- 白话js this指向问题
前言 通过本文,你大概能了解this基础指向的问题,抛开例子去说this太虚幻,这里还是结合几篇博文做个整理,算是个人的记录了. 先说概念,this指向与申明无关,永远指向距离自己最近的最终调用者 ...
- 彻底搞懂js this指向问题
在这里必须要提一句的是,this指向是学习js必须要掌握的(必须),再开始之前先看底部的总结,然后回上面看例子便一目了然. 例子1: function a(){ var user = "Ta ...
- JS this指向问题
<button onclick=(function(){alert(this)})()>I'm button</button>//this指代window <button ...
- js this指向理解
1.如果调用this的函数上级有多个对象,this只会指向上一级对象 下面实例fn函数调用this时,this指向b对象,如果b里面有a属性就输出值: 如果没有就是undefined 在来看下下面的实 ...
- JS—-this指向
箭头函数中this对象就是定义时所在的作用域,也就是说箭头函数本身没有this,内部的this就是外层代码块作用域中的this. 1.独立函数 var a = 0var test = ()=> ...
- JS this指向总结
使用 JavaScript 开发的时候,很多开发者多多少少会被 this 的指向搞蒙圈,但是实际上,关于 this 的指向,记住最核心的一句话:哪个对象调用函数,函数里面的this指向哪个对象. 下面 ...
- js this 指向
JavaScript 作为一种脚本语言身份的存在,因此被很多人认为是简单易学的.然而情况恰恰相反,JavaScript 支持函数式编程.闭包.基于原型的继承等高级功能.由于其运行期绑定的特性,Java ...
- js this指向汇总
this指向 普通函数 window 定时器函数 window 事件函数 事件源 箭头函数 父function中的this,没有就是window 对象函数 对象本身 构造函数 实例化 ...
- 可能是史上最强大的js图表库——ECharts带你入门
PS:之前的那篇博客Highcharts——让你的网页上图表画的飞起 ,评论中,花儿笑弯了腰 和 StanZhai 两位仁兄让我试试 ECharts ,去主页看到<Why ECharts ?&g ...
随机推荐
- SharePoint 2013 日期和时间字段格式设置
前言 最近碰到一个需求,用户希望修改日期和时间字段的格式,因为自己的环境是英文的,默认的时间格式是[月/日/年]这样的格式,我也是碰到这个问题才知道,这是美式的时间格式,然而用户希望变成英式的时间格式 ...
- iOS 消息处理之performSelector
//// RootViewController.h// DSCategories//// Created by dasheng on 15/12/17.// Copyright © 2015年 ...
- seL4之hello-3征途
seL4之hello-3征途 回顾上周 了解seL4的启动流程和初始化线程 了解seL4的几种内核对象和权能机制 完成hell0-2的运行. 补充上周 1.找到根任务(初始化线程)的创建具体的位置(那 ...
- 使用vscode访问和修改远程计算机文件
使用vscode访问和修改远程文件,分三步实现:在远程linux机器上安装rmate:在本地windows上安装openssh:在vscode中安装扩展remote vscode. 1. 在远程lin ...
- 0036 Java学习笔记-多线程-创建线程的三种方式
创建线程 创建线程的三种方式: 继承java.lang.Thread 实现java.lang.Runnable接口 实现java.util.concurrent.Callable接口 所有的线程对象都 ...
- 萌新笔记——git的问题(error: object file .git/objects/* is empty...)的解决方案及对git版本库文件的了解
由于操作不当,导致git版本库出了大问题,如下所示: error: object file .git/objects/8b/61d0135d3195966b443f6c73fb68466264c68e ...
- kvm/qemu/libvirt学习笔记 (1) qemu/kvm/libvirt介绍及虚拟化环境的安装
kvm简介 kvm最初由Quramnet公司开发,2008年被RedHat公司收购.kvm全称基于内核的虚拟机(Kernel-based Virtual Machine),它是Linux的一个内核模块 ...
- Chrome 扩展机制
据说,今年9月份开始,谷歌将在Chrome浏览器中全面禁用NPAPI插件,Chrome 45以后将无法再加载NPAPI插件,并推出了一种新的机制:扩展. 其实,如果把浏览器看作一块画布的话,NPAPI ...
- jdbc java数据库连接 7)获取插入数据的自增长值
我们创建一个sql表,里面的数据往往都会有自增长值. 那么,我们用jdbc插入数据的时候,要想同时获得这个增长值. 代码: /** * * 这是插入一条数据的同时,获取该数据的则增长列的值(该例子的自 ...
- Linux-./configure: error: the HTTP rewrite module requires the PCRE library.
这个问题是要解决: yum -y install pcre-devel 然后在yum的时候发现出错.问题是我的linux不能上网. 这个问题搞得烦死了.和主机能ping.但是就是不能上网: ping ...