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详解 学习笔记相关推荐

  1. 燕十八老师高级JS之arguments详解

    arguments是什么? 答:是1个对象 是一个长的很很像数组的对象 arguments内容是什么? 答:是函数运行时的实参列表 (function (d,e,f){console.log(argu ...

  2. 八、Vue cli3详解学习笔记

    一.认识Vue CLI3 1.1 vue-cli 3 与 2 版本有很大区别: vue-cli 3 是基于 webpack 4 打造,vue-cli 2 还是 webapck 3 vue-cli 3 ...

  3. 燕十八老师 JS高级学习笔记 之作用域链

    作用域 在JS中,函数嵌套是非常普遍的,在函数嵌套中:对变量是如何寻找的? 答: 首先在函数内寻找,寻找不到,则在外层寻找 ...直到..全局(window)区域. // 例子1var c=5;fun ...

  4. 燕十八老师JS高级之词法分析笔记

    词法分析 分析什么? 按顺序3样东西 1.先分析参数 2.再分析变量声明 3.分析函数声明 一个函数能使用的局部变量,就从上面的3步分析而来 具体步骤: 1.在函数运行的前的瞬间,会生成Active ...

  5. MySQL燕十八老师课程笔记:第十六课:MySQL各个函数

    # 在给商品打八八折的基础上抹掉零头 select goods_id,goods_name,floor(shop_price*0.88) from goods where cat_id=4; # 给每 ...

  6. 学习笔记1..燕十八老师公益课堂

    2019独角兽企业重金招聘Python工程师标准>>> 1:show create table thread的结果 2:.php文件中,的 set names 信息. 3:网页的me ...

  7. MySQL燕十八老师课程笔记:第六课:商品表的各种按条件查询

    老师下了ecshop,我看有弹幕同学说:"可以下,但没必要",我就没下. 查询: #先模拟ecshop建一个小型的商品表 create table goods( goods_id ...

  8. MySQL燕十八老师课程笔记:第九课:having筛选

    回顾之前做过的一道题:查询本店价比市场价省的钱,并且要求省钱200元以上的取出来 select goods_id,market_price,shop_price,(market_price-shop_ ...

  9. 燕十八mysql笔记_学习笔记2..燕十八老师公益课堂

    mysql_insert_id 返回表中auto_increment列刚刚产生的最大值,插入后要立即调用该函数,否则 可能得到意外的结果 表中必须有auto_increment列才能调用,否则只返回0 ...

最新文章

  1. java servlet init方法_JSP开发Servlet重写init()方法实例详解
  2. Arduino作为服务器显示温度,基于Arduino 带LCD显示的电子温度计
  3. Python: datetime 转换
  4. python做物联网控制_python实现NB-IoT模块远程控制
  5. AI编译器与传统编译器的联系与区别
  6. ubuntu测试键盘工具_强势霸榜GitHub,微软最强命令行工具发布引爆技术圈
  7. php常用算法的时间复杂度,php的几个经典排序算法及时间复杂度和耗时​
  8. 成立十个月,融资五个亿,创新奇智完成超4亿人民币A轮和A+轮融资
  9. pythonopencv算法_OpenCV3-Python基于Kalman和CAMShift算法应用
  10. 10.TCP/IP 详解卷1 --- 动态选路协议
  11. Bootstrap 按钮的使用
  12. Excel文件解密软件
  13. 小学steam计算机课程案例,STEAM课程典型案例——桥世界
  14. 【SPEA飞针测试】4085飞针测试机简述
  15. java架构中:亿级用户中心的设计与实践
  16. 内网穿透-把自己的电脑部署为公网可访问的服务器
  17. 哈佛结构和冯诺依曼结构特点
  18. 例说游戏角色设计与角色文化内涵的关系
  19. 有个程序猿很忧桑:一个命令rm -rf/ ,他把整个公司删没了...
  20. 2021年3月最新的山东大学网络认证的网址

热门文章

  1. 其实今天过节的兄弟们还有多重身份
  2. 华硕天选4和天选3区别选哪个好
  3. python win32 Workbooks.Open path error
  4. android社交软件开题报告,开题报告-基于android社交软件的开发.doc
  5. abb阀门定位器能够较大程度的改善碟阀
  6. Flowable入门系列文章183 - LDAP的属性介绍
  7. Matlab/Simulink中查表函数的应用
  8. MacOS 安装 Parallels Desktop,再安装 UOS 20 + QtCreaor,及搭建 DTK 开发环境
  9. 【秋招笔试】卓望笔试
  10. 深度学习实体关系抽取研究综述笔记