this大全,还有谁??????!!!!!!!
this在函数调用时创建,一般的对象没有this,全局window可以理解为一个函数,他有一个全局this
JavaScript 语言之所以有this的设计,跟内存里面的数据结构有关系。
函数里this的指向由函数的调用方式决定
不服就干,几个例子来说明函数的调用方式
var 变量 = 123
var 对象 = {
变量: 456,
函数: function () {
var 变量 = 789
console.log(this.变量)
}
};
(对象.函数)();
//==>对象.函数()
(对象.函数 = 对象.函数)();
//var ret = (对象.函数 = 对象.函数);//执行括号里的赋值操作
//ret()
(对象.函数, 对象.函数)()
//var ret = (对象.函数, 对象.函数);返回最后一个
//ret()
function a(xx) {
this.x = xx;
return this
};
var x = a(5);//此时x 是window
var y = a(6);//此时x 是6
console.log(x.x);//x是6 6.6 undefine
console.log(y.x);//window.x是6
var 对象 = {
函数一:function(){
function 函数二(){
console.log(this)
}
return 函数二()
}
}
对象.函数一()//this是window,函数二虽然在函数一里面调用,但函数二前面没前缀,或者看做window.函数二(),所以函数二里的this就是window
var num = 20;
var obj = {
num:30,
fn:(function (num) {
this.num *= 3;
num += 15;
var num = 45;
return function () {
this.num *= 4;
num += 20;
console.log(num);
}
})(num)
}
var fn = obj.fn;
fn();//65
obj.fn();//85
console.log(window.num,obj.num);//240,120
var o = {
f: function () {
console.log(this);
},
2: function () {
console.log(this);
}
};
o.f(); //o
o[2]();//o !!!!!!!!!!这种和上一个等价
var length = 10;
function fn() {
console.log(this.length);
}
var obj = {
length: 5,
method: function (f) {
f(); //10
arguments[0](); //1 (arguments是一个伪数组对象,他的第一个参数是fn函数,他调用fn函数,所以this指的是arguments)
arguments[0].call(this); //5(改变fn的指向,这里的this是obj)
}
};
obj.method(fn);
箭头函数的this
箭头函数没有this,他的this是外层的this,外层的this一旦确定,这时候不管谁调用箭头函数,他的this都是原来确定的外层this,但是如果再改变外层的this,箭头函数的this跟着改变,
call,apply,bind方法指定this
函数.call(任意,函数参数,...)//call改变this会立即执行函数,第一个参数的类型不同改变的this指向也不同,如果是对象this就指向该对象,如果是字面量就转换成相应的对象this指向这个this,如果是null和undefined就是window
函数.apply(任意,[函数参数,...])
函数.bind(任意)//绑定后不会立即执行,啥时候再调用函数,函数里的this就是现在绑定的,==注意this只能改变一次==
this大全,还有谁??????!!!!!!!的更多相关文章
- Oracle 数据库语句大全
Oracle数据库语句大全 ORACLE支持五种类型的完整性约束 NOT NULL (非空)--防止NULL值进入指定的列,在单列基础上定义,默认情况下,ORACLE允许在任何列中有NULL值. CH ...
- 开源 iOS 项目分类索引大全 - 待整理
开源 iOS 项目分类索引大全 GitHub 上大概600个开源 iOS 项目的分类和介绍,对于你挑选和使用开源项目应该有帮助 系统基础库 Category/Util sstoolkit 一套Cate ...
- .NET Core dotnet 命令大全
dotnet 命令大全,让你理解dotnet 命令. 本文将以一个实例串起 dotnet 所有命令,让你玩转dotnet 命令. 本篇文章编写环境为windows 10 ,dotnet 命令同样适用于 ...
- Python 资源大全中文版
Python 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列的资源整理.awesome-python 是 vinta 发起维护的 Python 资源列 ...
- 【JS】javascript 正则表达式 大全 总结
javascript 正则表达式 大全 总结 参考整理了一些javascript正则表达式 目的一:自我复习归纳总结 目的二:共享方便大家搜索 微信:wixf150 验证数字:^[0-9]*$ 验证n ...
- TextView使用大全
最近打算写一个系列的android初级开发教程,预计40篇以上的文章,结合我实际工作中的经验,写一些工作中经常用到的技术,让初学者可以少走弯路,写一个系列的话,大家学习起来也有头有尾. 今天就从我们每 ...
- [WinForm]WinForm跨线程UI操作常用控件类大全
前言 在C#开发的WinForm窗体程序开发的时候,经常会使用多线程处理一些比较耗时之类的操作.不过会有一个问题:就是涉及到跨线程操作UI元素. 相信才开始接触的人一定会遇上这个问题. 为了解决这个问 ...
- iOS中NSLog输出格式大全
iOS开发中的输出格式大全: %@ 对象 %d, %i 整数%u 无符整形%f ...
- 织梦dedecms漏洞修复大全(5.7起)
很多人说dedecms不好,因为用的人多了,找漏洞的人也多了,那么如果我们能修复的话,这些都不是问题. 好,我们来一个一个修复.修复方法都是下载目录下该文件,然后替换或添加部分代码,保存后上传覆盖(记 ...
- [No00009B]win10快捷键大全
微软为Win10命令行(Command Prompt)加入了Ctrl + V的支持 Win10新增功能快捷键大全: 贴靠窗口:Win + 左/右 > Win + 上/下 > 窗口可以变为 ...
随机推荐
- MIT 6.S081 Lab5 Copy-On-Write Fork
前言 最近绝大多数的空闲时间都拿来锤15-445了,很久没动6.S081.前几天回头看了一下一个月前锤完的Lazy Allocation,自己写的代码几乎都不认识了.......看来总结之类的东西最好 ...
- ubuntu下安装RabbitMQ
ubuntu下安装RabbitMQ 安装erlang 由于rabbitMq需要erlang语言的支持,在安装rabbitMq之前需要安装erlang sudo apt-get install erla ...
- 2020年的UWP(3)——UWP和desktop extension的简单交互
上一篇<2020年的UWP(2)--In Process App Service>中我们了解了UWP和Desktop Extension可以通过AppService进行数据交互.本篇我们就 ...
- Android测试三件套:传文件、抓包、看日志
在对安卓进行测试时,我们需要把 apk 传到安卓机上,对请求抓包,同时监控应用日志.本文就来讲讲具体操作. 安卓机是指基于安卓的机器 ,如手机.POS 机.电视盒子等. 传文件 我们拒绝用 U 盘传文 ...
- solr全文检索学习
序言: 前面我们说了全局检索Lucene,但是我们发现Lucene在使用上还是有些不方便的,例如想要看索引的内容时,就必须自己调api去查,再例如一些添加文档,需要写的代码还是比较多的 另外我们之前说 ...
- Docker - 解决在容器内删除和主机映射的目录而报错 rm: cannot remove 'webapps': Device or resource busy 的问题
问题背景 docker run -d --name tomcat7 -v /usr/local/tomcat/webapps:/usr/local/tomcat/webapps tomcat:7 使用 ...
- RPC协议实践入门
RPC 是什么 RPC(Remote Procedure Call) 是一个计算机通信协议.该协议允许运行与一台计算机的程序调用另一个地址空间的程序,是一个通过发送请求-接受回应进行信息交互的系统. ...
- 【JVM第五篇--运行时数据区】方法区
写在前面的话:本文是在观看尚硅谷JVM教程后,整理的学习笔记.其观看地址如下:尚硅谷2020最新版宋红康JVM教程 一.栈.堆.方法区的关系 虚拟机运行时的数据区如下所示: 即方法区是属于线程共享的内 ...
- 1. 线性DP 120. 三角形最小路径和
经典问题: 120. 三角形最小路径和 https://leetcode-cn.com/problems/triangle/ func minimumTotal(triangle [][]int) ...
- shell编程之俄罗斯方块
按键获取: 向上 ^[[A 向下 ^[[B 向左 ^[[D 向右 ^[[C 其中 ^[为ESC键. 按键获取的具体shell代码如下所示: #! /bin/bash GetKey() { a ...