燕十八老师高级JS之this详解 学习笔记
JS中的this到底是谁? JS非常灵活 PHP中指的是当前对象 JS中函数的四种调用方式 1.作为普通的函数来调用时 this的值 指向window,准确地说 this为NULL 但被解释成window。在ES 5标准中,如果this为null 则解释成undefined
alert(window.xx); //undefinedfunction t(){this.xx=333;}t();alert(window.xx); //333
2 对象的方法来调用 this指向方法的调用者,即母体对象 不管被调函数 声明是属于方法还是函数
var obj={xx:999,yyy:888} ;obj.t=function () {alert(this.xx);}obj.t(); //999var dog={xx:'wangwang'};dog.t=obj.t; // 当该句完成之后,整个页面也仍然只有一个函数。 相当于引用赋值dog.t(); //wangwang;show=function () {alert('show '+this.xx);}dog.t=show;dog.t(); //show wangwang
3.函数作为构造函数调用时JS中没有类的概念,创建对象是用构造函数来完成,或者直接用json格式{}来写对象
function Dog(name,age) {this.name=name;this.age=age;this.bark=function (){alert('I am '+this.name +'!'); //注意此处的this不一定指向dog 取决于被调用外层的this}}var dog=new Dog('huzi',2);dog.bark(); // i am huzi!function Pig(){this.age=99;return 'abc';}var pig=new Pig(); //此处得到的是Pig对象 因为函数作为构造函数运行时,return的值是忽略的 依然返回对象console.log(pig);
new Dog()发生了以下几个步骤 a.系统创建了空对象{}--------空对象constructor属性指向Dog函数 b.把函数的this指向该空对象 c.执行该函数 d.返回该对象 4.函数通过call apply调用语法格式: 函数.call(对象,参数1,参数2,参数3....参数n)
function t(num) {alert('我的真实年龄是 '+this.age+' 岁');alert('但我一般告诉别人我 '+(this.age+num)+' 岁');}var human={name:'lisi',age:28};human.t=t;human.t(-10); //this指向了human 但是human多了一个方法//接下来我们不把t赋为human的属性,也能把this指向human的var wangwu={name:'wangwu',age:30};t.call(wangwu,5);
解释: fn.call(对象,参数1,参数2.....参数n); 运行如下: a. fn中的this 指向对象obj b. 运行fn(参数1,参数2.....参数n);
name='this is window';var obj={name:'php'};obj.t=function (){alert(this.name)}obj.t(); //php
var dog={name:'huzi'};dog.t=obj.t; // 当该句完成之后,整个页面也仍然只有一个函数。 相当于引用赋值dog.t(); //huzi
// ---------------------------------------var tmp=dog.t; //tmp是一个函数tmp(); // this is window 相当于window.tmp
// ---------------------------------------console.log(typeof (dog.t=obj.t)); //表达式必有返回值 而该表达式(dog.t=obj.t)返回的是一个函数 是一个值 即不是通过引用来调用的 而是立即使用函数本身//效果等同于 function (){alert(this.name)}() 此时this指向null null又会被解释成window(dog.t=obj.t)(); //this is window/*有经验的前段但对JS理解的不深的同学说:有this操作的函数 this.age=xx 的函数不能直接调用 而是要new来调用答:这句话没问题,因为如果直接调用this 指向window 将会污染全局变量 这才是最终原因*/dog.t.call(obj); //php
燕十八老师高级JS之this详解 学习笔记相关推荐
- 燕十八老师高级JS之arguments详解
arguments是什么? 答:是1个对象 是一个长的很很像数组的对象 arguments内容是什么? 答:是函数运行时的实参列表 (function (d,e,f){console.log(argu ...
- 八、Vue cli3详解学习笔记
一.认识Vue CLI3 1.1 vue-cli 3 与 2 版本有很大区别: vue-cli 3 是基于 webpack 4 打造,vue-cli 2 还是 webapck 3 vue-cli 3 ...
- 燕十八老师 JS高级学习笔记 之作用域链
作用域 在JS中,函数嵌套是非常普遍的,在函数嵌套中:对变量是如何寻找的? 答: 首先在函数内寻找,寻找不到,则在外层寻找 ...直到..全局(window)区域. // 例子1var c=5;fun ...
- 燕十八老师JS高级之词法分析笔记
词法分析 分析什么? 按顺序3样东西 1.先分析参数 2.再分析变量声明 3.分析函数声明 一个函数能使用的局部变量,就从上面的3步分析而来 具体步骤: 1.在函数运行的前的瞬间,会生成Active ...
- MySQL燕十八老师课程笔记:第十六课:MySQL各个函数
# 在给商品打八八折的基础上抹掉零头 select goods_id,goods_name,floor(shop_price*0.88) from goods where cat_id=4; # 给每 ...
- 学习笔记1..燕十八老师公益课堂
2019独角兽企业重金招聘Python工程师标准>>> 1:show create table thread的结果 2:.php文件中,的 set names 信息. 3:网页的me ...
- MySQL燕十八老师课程笔记:第六课:商品表的各种按条件查询
老师下了ecshop,我看有弹幕同学说:"可以下,但没必要",我就没下. 查询: #先模拟ecshop建一个小型的商品表 create table goods( goods_id ...
- MySQL燕十八老师课程笔记:第九课:having筛选
回顾之前做过的一道题:查询本店价比市场价省的钱,并且要求省钱200元以上的取出来 select goods_id,market_price,shop_price,(market_price-shop_ ...
- 燕十八mysql笔记_学习笔记2..燕十八老师公益课堂
mysql_insert_id 返回表中auto_increment列刚刚产生的最大值,插入后要立即调用该函数,否则 可能得到意外的结果 表中必须有auto_increment列才能调用,否则只返回0 ...
最新文章
- java servlet init方法_JSP开发Servlet重写init()方法实例详解
- Arduino作为服务器显示温度,基于Arduino 带LCD显示的电子温度计
- Python: datetime 转换
- python做物联网控制_python实现NB-IoT模块远程控制
- AI编译器与传统编译器的联系与区别
- ubuntu测试键盘工具_强势霸榜GitHub,微软最强命令行工具发布引爆技术圈
- php常用算法的时间复杂度,php的几个经典排序算法及时间复杂度和耗时​
- 成立十个月,融资五个亿,创新奇智完成超4亿人民币A轮和A+轮融资
- pythonopencv算法_OpenCV3-Python基于Kalman和CAMShift算法应用
- 10.TCP/IP 详解卷1 --- 动态选路协议
- Bootstrap 按钮的使用
- Excel文件解密软件
- 小学steam计算机课程案例,STEAM课程典型案例——桥世界
- 【SPEA飞针测试】4085飞针测试机简述
- java架构中:亿级用户中心的设计与实践
- 内网穿透-把自己的电脑部署为公网可访问的服务器
- 哈佛结构和冯诺依曼结构特点
- 例说游戏角色设计与角色文化内涵的关系
- 有个程序猿很忧桑:一个命令rm -rf/ ,他把整个公司删没了...
- 2021年3月最新的山东大学网络认证的网址
热门文章
- 其实今天过节的兄弟们还有多重身份
- 华硕天选4和天选3区别选哪个好
- python win32 Workbooks.Open path error
- android社交软件开题报告,开题报告-基于android社交软件的开发.doc
- abb阀门定位器能够较大程度的改善碟阀
- Flowable入门系列文章183 - LDAP的属性介绍
- Matlab/Simulink中查表函数的应用
- MacOS 安装 Parallels Desktop,再安装 UOS 20 + QtCreaor,及搭建 DTK 开发环境
- 【秋招笔试】卓望笔试
- 深度学习实体关系抽取研究综述笔记