JS中this到底指向谁?
关于this的指向,是一个令人很头疼的问题。这里我总结了几点,看懂这几点,this指向基本也就没问题了。
归根结底,this指向就一句话:谁最终调用函数,this指向谁!!!
关于这点,记住这三句:
① this指向的,永远只可能是对象!
② this指向谁,永远不取决于this写在哪!而是取决于函数在哪调用。
③ this指向的对象,我们称之为函数的上下文context,也叫函数的调用者。
下面,请看具体情况。
① 通过函数名()直接调用:this指向window
function func(){
console.log(this);
}
//① 通过函数名()直接调用:this指向window
func(); // this--->window
② 通过对象.函数名()调用的:this指向这个对象
function func(){
console.log(this);
}
//② 通过对象.函数名()调用的:this指向这个对象
// 狭义对象
var obj = {
name:"obj",
func1 :func
};
obj.func1(); // this--->obj
// 广义对象
document.getElementById("div").onclick = function(){
this.style.backgroundColor = "red";
}; // this--->div
③ 函数作为数组的一个元素,通过数组下标调用的:this指向这个数组
function func(){
console.log(this);
}
//③ 函数作为数组的一个元素,通过数组下标调用的:this指向这个数组
var arr = [func,1,2,3];
arr[0](); // this--->arr
④ 函数作为window内置函数的回调函数调用:this指向window( setInterval setTimeout 等)
function func(){
console.log(this);
}
//④ 函数作为window内置函数的回调函数调用:this指向window
setTimeout(func,1000);// this--->window
//setInterval(func,1000);
⑤ 函数作为构造函数,用new关键字调用时:this指向新new出的对象
function func(){
console.log(this);
}
//⑤ 函数作为构造函数,用new关键字调用时:this指向新new出的对象
var obj = new func(); //this--->new出的新obj
JS中this到底指向谁?的更多相关文章
- js 中this到底指向哪里?
其实js的this指向很简单.我们记住下面3种情况. this 指向的是浏览器中的window.代码如下: function fn(){ this.name='yangkun'; this.age=2 ...
- JS中new到底发生了什么
outline prototype 与 __proto__ function 与 object new 到底发生了什么 prototype 与 __proto__ 首先说下在JS中比较容易让人困惑的 ...
- 理解js中this的指向
学习自原文 http://www.cnblogs.com/pssp/p/5216085.html后的一点小结(原文作者总结的很棒^_^)! 关于js中this的指向,在函数定义的时候还无法 ...
- js中this的指向
在js中this的指向对于新手来说一定是个难题,但是如果你真正理解了的话,也就没什么问题啦,下面就来讲讲this吧. JS中,this的值取决于调用的模式(调用对象),而JS中共有4种调用模式: 1. ...
- JS中的this 指向问题
我发现在对JS的学习中有很多朋友对this的指向问题还是有很大的误区或者说只是大致了解,但是一旦遇到复杂的情况就会因为this指向问题而引发各种bug. 对于之前学习过c或者是Java的朋友来说可能这 ...
- 轻松了解JS中this的指向
JS中的this指向一直是个让人头疼的问题,想当初我学的是天昏地暗,查了好多资料,看的头都大了,跟他大战了那么多回合,终于把它搞定个七八分,其实往往都是我们复杂化了,现在就让大家轻松看懂this的指向 ...
- js中改变this指向的call、apply、bind 方法使用
前言: 由于js 中this的指向受函数运行环境的影响,指向经常改变,使得开发变得困难和模糊,所以在封装sdk,写一些复杂函数的时候经常会用到this 指向绑定,以避免出现不必要的问题,call.ap ...
- js中 this 的指向
js中 this的指向一共存在3种地方: 1.全局的this; 2.构造函数的this; 3.call/apply; 一.全局的this: function test(){ this.d = 3;// ...
- what's this? 浅谈js中this的指向问题
刚刚学习js的朋友可能和我一样,看到代码中的this总是一脸懵逼,不知道this到底指向谁.经过一段时间的了解,我想跟大家分享下自己的理解. 何时出现this 函数在调用的时候,会自动获得两个特殊变量 ...
随机推荐
- python运用中文注释时报错解决方法
写了一段简单的代码,不知 为什么总是报错,后来上网查了一下才知道原因,当用中文进行注释时需要添加如下代码:# coding=utf-8 (注意:该段代码必须放在最前面才能有用,并且 ...
- Nginx网站使用CDN之后禁止用户真实IP访问的方法
做过面向公网WEB的运维人员经常会遇见恶意扫描.拉取.注入等图谋不轨的行为,对于直接对外的WEB服务器,我们可以直接通过 iptables .Nginx 的deny指令或是程序来ban掉这些恶意请求. ...
- SpringMVC参数校验(针对`@RequestBody`返回`400`)
SpringMVC参数校验(针对@RequestBody返回400) 前言 习惯别人帮忙做事的结果是自己不会做事了.一直以来,spring帮我解决了程序运行中的各种问题,我只要关心我的业务逻辑,设计好 ...
- 苹果App删除 AppStore应用删除指南
最近做IOS应用上传时,想改一下SUK或者Bundle ID ,发现改不了,只能删除. 但是删除却没有找到删除按钮,百度半天不给力,不过后来多亏一位群里的兄弟给找个链接,终于解决 今天就给他记录下来, ...
- iOS 开发遇到 调不起相机问题
在iOS 开发中 使用html 中的input 标签调起工程里面的相机,手机无反应 1.先看看info.plist 加没加相机的权限,添加Privacy - Camera Usage Descript ...
- 【转】译—游戏开发者应该如何应用Git和GitHub
原文地址:http://bbs.9ria.com/thread-259587-1-2.html "我确信Git是强大的,但是它看起来很复杂--我依然会坚持我当前的工作流"就像说&q ...
- GitLab 客户端添加SSH KEY
一.生成公钥 先查看系统用户目录下是否有 .ssh 文件夹,如果有的话,那说明你之前已经生成过公钥,则可以跳过生成公钥. 运行下面的命令生成一个密钥: ssh-keygen -t rsa -C &qu ...
- Android Studio 安装后首次启动的 Config path ...... is invalid 问题(转)
原文链接:http://m.blog.csdn.net/blog/hnust_xiehonghao/46127775 1. 问题描述: 安装好Android Studio后,启动时弹出如下信息: Co ...
- Redis基础学习(二)—数据类型
一.Redis支持的数据类型 Redis中存储数据是通过key-value存储的,对于value的类型有以下几种: (1)字符串. (2)Map (3)List (4)Set public cla ...
- 1113: 零起点学算法20——输出特殊值II
1113: 零起点学算法20--输出特殊值II Time Limit: 1 Sec Memory Limit: 64 MB 64bit IO Format: %lldSubmitted: 207 ...