对于JavaScript中this关键字的理解
这是我第二遍学this了,第一遍学的懵懵的。this指哪里都是凭我一个男人的直觉然后控制台输出看看对不对。
刚查了书、博客、视频。理解差不多了。毕竟菜鸡me;
一、首先介绍下什么是this
this是一个标识符,它需要和值进行绑定,和变量差不多;但是在你的代码中,它不是和某个具体的值进行绑定。而是绑定到正确的对象上,一般来说参数究竟绑定在哪个对象上都是由定位函数参数规则所决定的。
二、this对象是在运行时基于函数的执行环境绑定的,当函数被作为某个对象的方法调用时,this等于那个对象。
代码一
1 var name = "全局"; 2 var obj = { 3 name : "object", 4 getNameFunc : function() { 5 console.log(this.name); 6 } 7 }; 8 obj.getNameFunc();
三、相同的在全局函数是this就是window;但是匿名函数的执行环境的执行环境具有全局性所以代码2就有的解释啦
代码二
var name = "全局";var obj = {name : "object",getNameFunc : function() {return function(){console.log(this.name);};} };obj.getNameFunc() ();
四、在JavaScript高程中作者说每个函数在调用时都会自动取得两个变量:this和argutments。内部函数在搜索这两个变量时,只会搜索到其活动对象为止。因此永远不可能直接访问外部函数的这两个变量。把外部作用域中的this对象保存在一个闭包能访问到的地方;如代码三
代码三
1 var name = "全局"; 2 var obj = { 3 name : "object", 4 getNameFunc : function() { 5 var biubiu =this; 6 return function(){ 7 console.log(biubiu.name); 8 }; 9 } 10 }; 11 obj.getNameFunc() ();
五 ;总结
关键词this使得我们可以仅创建一个函数对象,就可以将其作为方法用在一些其他的对象上,每次我们调用该方法时它便可以调用他的对象。对于节省内存十分有用。
这都是因为this得以实现。(我也不大懂Twitter前培训主管视频中看到的。)
六、练习
预测this
var fn = function(one, two){log(this, one, two); }; var r ={ }, g = {}, b = {}; r.method = fn; r.method(g,b);
答案是: r 对象。g,b 是one ,two。没疑问吧。r点method 这个是对象吧。对象this
当函数被作为某个对象的方法调用时,this等于那个对象。
var fn = function(one, two){log(this, one, two); }; var r ={ }, g = {}, b = {}; r.method = fn; fn(g,b);
答案是全局:因为这次不是作为函数调用
var x = "我是全局变量"; //定义全局变量x function a(){ //定义函数类结构athis.x = "我是在函数类结构a中声明的哦"; } //定义普通函数,弹出当前指针所包含的变量x的值 function f(){ alert (this.x); } f.call(new a());
call()的官方解释,“调用一个对象的一个方法,以另一个对象替换当前对象。”,
f.call(new a())就是把函数(其实也是对象)f复制到被调用对象“new a()”下面去解析.我的理解是还没细细研究。
new 这个我还没学到。
关键在于this,对,关键还是在于this的作用域。this的作用域不是定义它的函数的作用域,而是执行时的作用域。
转载于:https://www.cnblogs.com/cxh1995/p/7346546.html
对于JavaScript中this关键字的理解相关推荐
- php中this的使用技巧,JavaScript中this关键字使用方法详解
JavaScript中this关键字使用方法详解 在面向对象编程语言中,对于this关键字我们是非常熟悉的.比如C++.C#和Java等都提供了这个关键字,虽然在开始学习的时候觉得比较难,但只要理解了 ...
- JavaScript中this关键字的使用比较
JavaScript中this关键字的使用比较 this关键字在JavaScript中,用的不能说比较多,而是非常多.那么熟悉this关键字的各种用法则显得非常关键. this有时候就是我们经常说的上 ...
- 深入解析Javascript中this关键字的使用
深入解析Javascript中面向对象编程中的this关键字 在Javascript中this关键字代表函数运行时,自动生成的一个内部对象,只能在函数内部使用.比如: function TestFun ...
- JavaScript中this关键字使用方法详解
在面向对象编程语言中,对于this关键字我们是非常熟悉的.比如C++.C#和Java等都提供了这个关键字,虽然在开始学习的时候觉得比较难,但只要理解了,用起来是非常方便和意义确定的.JavaScrip ...
- javascript中闭包的一些理解
闭包是javascript中绕不开的话题,关于闭包的一些概念和应用,这方面资料比较多,在此就不再赘述.众所周知,闭包的一个作用就是 让一些变量始终保持在内存中 ,在此我用一些实际代码对这句话作进一步的 ...
- Javascript中的关键字和保留字
ECMA-262 描述了一组具有特定用途的关键字.这些关键字可用于表示控制语句的开始或结束,或者用于执行特定操作等.按照规则,关键字也是语言保留的,不能用作标识符.以下就是ECMAScript的全部关 ...
- Java中 synchronized 关键字的理解
synchronized 关键字的理解 在Java中,synchronized 是一个重量级的控制并发的关键字. 这个关键字可以保证并发过程所必须的"原子性","可见性& ...
- JavaScript中var关键字的使用详解
作用声明作用:如声明个变量. 语法 ? 1 var c = 1; 省略var在javascript中,若省略var关键字而直接赋值,那么这个变量为全局变量,哪怕是在function里定义的. ? 1 ...
- JavaScript中事件循环的理解 Event Loop
为了解决单线程运行阻塞问题,JavaScript用到了计算机系统的一种运行机制,这种机制就叫做事件循环(Event Loop) 事件循环(Event Loop) 在JavaScript中,所有的任务都 ...
最新文章
- 控制行输入以下两句命令16倍速播放青年大学习
- ng-model 绑定checkbox 取不到值?
- 微软确认5月2日召开新品发布会 8天后就是Build 2017大会
- 数据结构中La表的数据合并到Lb表中
- springmvc initial初始化
- centos7火狐浏览器上不了网_网络问题备忘:能ping通,就是上不了网
- poj Risk 1603 floyd基础题!!
- 对话改写论文笔记(2021年初 )
- Git下载、安装及环境配置(超详细)
- 什么软件能测试显卡功耗,测试方案及测试平台
- 浅谈HTTP中Get、Post、Put与Delete的区别
- Jdon框架(JdonFramework)应用系统
- 网易云音乐歌单详情列表爬虫破解
- Correcting Chinese Spelling Errors with Phonetic Pre-training
- underscore.js 报_is not defined解决方法
- 《GRACE: Gradient Harmonized and Cascaded Labeling for Aspect-based Sentiment Analysis》阅读笔记
- 篱笆家装宝典之四——瓷砖
- [机缘参悟-82]:企业、HR、管理者激励员工的本质
- Android快速SDK(1)基础工具库QuickBase
- alt 和 title 的区别
热门文章
- python接口 同花顺_这是真的么 | 学会了用Python预测股票价格
- 参考灵敏度_和平精英2021灵敏度分享码一览 S11灵敏度压枪目前最稳调整攻略
- linux运维脚本编写,Linux运维常用shell脚本实例 (转)
- maven 主工程 java_Maven创建Java Application工程(既jar包)
- python无限次输入_在Raspberry Pi上的Python用户输入无限循环内部输入时很多输入错过了输入...
- 实验报告三c语言,C语言实验报告三
- 怎么用python爬取整个网站_5分钟学会Python爬取整个网站
- python爬取资料_Python爬取FLASH播放器中的资料
- Esper——内存计算、事件驱动、SQL支持
- 深入解析Dropout——基本思想:以概率P舍弃部分神经元,其它神经元以概率q=1-p被保留,舍去的神经元的输出都被设置为零...