js重点--this关键字
推荐博客:https://www.cnblogs.com/huaxili/p/5407559.html
this是JavaScript的一个关键字,表示的不是对象本身,而是指被调用的上文。
主要用于以下四种环境:
1.直接调用,表示的是全局对象,window
2.作为对象方法被调用,表示的是该对象
3.作为构造函数被调用,表示的是创建的实例
4.可以使用apply(),call()改变this的表示对象,第一个参数就是this
1.直接调用,表示的是全局对象,window:
调用函数的结果是1,即this指的是全局对象,window,所以count值为全局变量的值
var count = 1;
function func(){
console.log(this.count);
}
func(); //1
2.作为对象方法被调用,表示的是该对象:
func()方法作为对象的方法被调用,此时this表示的被调用的对象obj,所以count值为obj对象中的值count,若是对象obj中没有count属性,则为undefined
var count = 1;
function func(){
console.log(this.count);
} var obj = {};
obj.count = 2;
obj.show = func; obj.show(); //2
3.作为构造函数被调用,表示的是创建的实例:
func()作为构造函数,创建了他的实例,此时this表示的是创建的实例Func
var count = 1;
function func(){
this.count = 2;
} var Func = new func();
console.log(count); //1
console.log(Func.count); //2
4.可以使用apply(),call()改变this的表示对象,第一个参数就是this:
apply()是函数对象的一个方法,它的作用是改变函数的调用对象(实则是将某某对象的某个方法放到另一个好基友对象那里去执行),它的第一个参数就表示改变后的调用这个函数的对象。因此,this指的就是这第一个参数。同call()
可以使用apply()或是call()来改变this指向。此时this表示的是obj对象
var count = 1;
function func(){
console.log(this.count);
} var obj = {};
obj.count = 2; func.call(); //1
func.call(obj); //2
5.嵌套函数作用域中的this:
嵌套函数被调用时并没有继承被嵌套函数的this引用,在嵌套函数被调用时,this指向全局对象。在有些应用中,我们需要在嵌套函数中读取调用被嵌套函数的对象的属性,此时可以声明一个局部变量保存this引用,
var count = 1;
function func(){
console.log(this.count); function func2(){
console.log(this.count);
} func2();
} var obj = {};
obj.count = 2;
obj.show = func; obj.show(); //2,1
此时,嵌套函数与被嵌套函数中的this都表示了obj对象。
var count = 1;
function func(){
console.log(this.count); var self = this;
function func2(){
console.log(self.count);
} func2();
} var obj = {};
obj.count = 2;
obj.show = func; obj.show(); //2,2
js重点--this关键字的更多相关文章
- js中this关键字测试集锦
参考:阮一峰<javascript的this用法>及<JS中this关键字详解> this是Javascript语言的一个关键字它代表函数运行时,自动生成的一个内部对象,只能在 ...
- JS中this关键字详解
本文主要解释在JS里面this关键字的指向问题(在浏览器环境下). 阅读此文章,还需要心平气和的阅读完,相信一定会有所收获,我也会不定期的发布,分享一些文章,共同学习 首先,必须搞清楚在JS里面,函数 ...
- JS 中 this 关键字详解
本文主要解释在JS里面this关键字的指向问题(在浏览器环境下). 首先,必须搞清楚在JS里面,函数的几种调用方式: 普通函数调用 作为方法来调用 作为构造函数来调用 使用apply/call方法来调 ...
- JS中的关键字和保留字
JavaScript中不能作为变量名的关键字和保留字总结: 1.js中的关键字: break case catch continue default delete do else finally fo ...
- js保留的关键字
js保留的关键字 break else new var case finally return void catch for switch while continue function this w ...
- JS实现new关键字的功能
一.前言 众所周知:没有对象怎么办?那就new一个! 那么在JS中,当我们new一个对象的时候,这个new关键字内部都干了什么呢? 现在我们就来剖析一下原生JS中new关键字内部的工作原理. 二.原始 ...
- 关于js中this关键字的补充
前面: 前面虽然综合了网络上不少大牛的心得,但感觉还是意犹未尽,为了彻底搞清楚js中this的相关知识,决定再写一篇.个人觉得,在技术上,除非钻到细枝末节,否则很难达至非常高的水平. 补充1: 无法重 ...
- Js 使用new关键字调用函数和直接调用函数的区别
最近开始学习js,在看到书上的一个例子时,引发了我的一系列思考: 书上例子: function Person(name,age,job){ var o =new Object(); o.name=na ...
- js 屏蔽政治关键字
一般情况下,用户输入评论提交到后台的同时,在后台进行关键字过滤,昨天看到了一个js关键字过滤的方法,记录下. 方法很简单,先把需要过滤的关键字做成数组, 在for循环数组判断有没有匹配. ok,先来个 ...
随机推荐
- Android SingleTask使用注意点
在ActivityA中,startActivityForResult到ActivityB,其中ActivityB设置为SingleTask. 那么在实际出现的现象为: ActivityA的onActi ...
- SpringBoot+MyBatis配置多数据源
SpringBoot 可以支持多数据源,这是一个非常值得学习的功能,但是从现在主流的微服务的架构模式中,每个应用都具有唯一且准确的功能,多数据源的需求很难用到,考虑到实际情况远远比理论复杂的多,这里还 ...
- SQLServer之删除用户定义的数据库角色
删除用户定义的数据库角色注意事项 无法从数据库删除拥有安全对象的角色. 若要删除拥有安全对象的数据库角色,必须首先转移这些安全对象的所有权,或从数据库删除它们. 无法从数据库删除拥有成员的角色. 若要 ...
- 利用ZYNQ SOC快速打开算法验证通路(6)——LWIP实现千兆TCP/IP网络传输
一.前言 之前ZYNQ与PC之间的网络连接依赖于外接硬件协议栈芯片,虽然C驱动非常简单,但网络带宽受限.现采用LWIP+PS端MAC控制器+PHY芯片的通用架构.关于LWIP库,已经有很多现成的资料和 ...
- CTF杂项之音频隐写
题目来自bugku 二话不说,直接上图 由题目可以看出,这题需要用到一个KEY,加上又是一段音频,很容易联想到一个著名的音频隐写解密软件Mp3stego 直接上工具 ok,成功Get Flag
- 一条命令解决: sql server 2008 安装提示重启计算机
0.将安装的iso文件解压 1. 使用管理员账户打开 cmd命令行 2.将命令行的路径切换到解压路径下,你应该可以看到setup.exe 3.执行命令 一条命令解决:setup.exe /SkipR ...
- 对Link Map File的初步认识
什么是Link Map File Link Map File中文直译为链接映射文件,它是在Xcode生成可执行文件的同时生成的链接信息文件,用于描述可执行文件的构造部分,包括了代码段和数据段的分布情况 ...
- Redis和MongoDB的区别(面试受用)
项目中用的是MongoDB,但是为什么用其实当时选型的时候也没有太多考虑,只是认为数据量比较大,所以采用MongoDB. 最近又想起为什么用MongoDB,就查阅一下,汇总汇总: 之前也用过redis ...
- 好程序员告诉你HTML好在哪里,为什么值得我们学习
好程序员告诉你HTML好在哪里,为什么值得我们学习,HTML5对于用户来说,提高了用户体验,加强了视觉感受.HTML5技术在移动端,能够让应用程序回归到网页,并对网页的功能进行扩展,用户不需要下载客户 ...
- Batch Normalization的解释
输入的标准化处理是对图片等输入信息进行标准化处理,使得所有输入的均值为0,方差为1 normalize = T.Normalize([0.485, 0.456, 0.406],[0.229, 0.22 ...