this
1.默认绑定
有this,前面没有任何元素)不带任何修饰的函数进行调用的,只能采用默认绑定,this指向window

function foo () {console.log(this);  //windowconsole.log(this.a);
}
var a = 12;
foo();  //12思考
var a = 12;
function test() {this.a = 13; //重新付了一个值 a=13
}
test();
console.log(a); //? 13

2.隐式绑定
对象内部包含一个指向函数的属性,并通过这个属性间接引用这个函数,从而把this间接(隐式)绑定到这个对象上

//1.
function foo() {console.log(this);  //{a: 2, foo: ƒ}console.log(this.a);//2
}
var obj = {a: 2,foo: foo
}
obj.foo();
//2.
function foo() {console.log(this.a);
}
var obj2 = {a: 1,foo: foo
}
var obj1 = {a: 2,obj2: obj2
}
obj1.obj2.foo();    //1
var obj3 = {a: 3,obj1: obj1
}
obj3.obj1.obj2.foo(); //1

3.显示绑定
call,apply,bind都属于显式绑定一类,显示绑定后this便无法再修改

function foo() {console.log(this);   //{a: 2}console.log(this.a);  //2
}
var obj = {a: 2
}
foo.call(obj);
function foo() {console.log(this);   //{a: 2}console.log(this.a);  //2
}
var obj = {a: 2
}
foo.apply(obj);
function foo() {console.log(this);   //{a: 2}console.log(this.a);    //2
}
var obj = {a: 2
}
var f = foo.bind(obj);
f();

4.new绑定
实例化一个新对象后,会将实例对象绑定到函数调用中的this上。
绑定优先级:new绑定>显示绑定>隐式绑定>默认绑定

function foo(a) {console.log(this);this.a = a;console.log(this.a); //2
}
var bar = new foo(2);
console.log(bar.a); //2

5.箭头函数
es6新增的()=>箭头函数

//1.外层有函数:外层函数的`this`就是箭头函数的`this`
var obj = {a: 1,foo() {//this===objvar fn = () => {//this===objconsole.log(this.a);//this.a===1};fn();}
}
obj.foo();  //1
//2.外层没有函数:箭头函数的`this`就是`window`
var a = 123;
var obj = {a: 1,//this===windowfoo: () => {console.log(this.a); //window.a=123}
}
obj.foo();  //123

程序猿头头(this的绑定)相关推荐

  1. 程序猿小白应该注意什么

    在学校敲代码的时候,考虑的可能是怎么实现这个功能,怎么样把功能做的酷一点,可是当你进入了公司,你就会发现可能代码把功能实现是一方面的,你代码还需要良好的代码风格,命名规范,可读性易于维护,以及性能等等 ...

  2. 程序猿修仙之路--数据结构之你是否真的懂数组? c#socket TCP同步网络通信 用lambda表达式树替代反射 ASP.NET MVC如何做一个简单的非法登录拦截...

    程序猿修仙之路--数据结构之你是否真的懂数组? 数据结构 但凡IT江湖侠士,算法与数据结构为必修之课.早有前辈已经明确指出:程序=算法+数据结构  .要想在之后的江湖历练中通关,数据结构必不可少.数据 ...

  3. 一个Java程序猿眼中的前后端分离以及Vue.js入门

    原文:https://mp.weixin.qq.com/s/HWRYAR16vLE1XFep6_i1tA 松哥的书里边,其实有涉及到 Vue,但是并没有详细说过,原因很简单,Vue 的资料都是中文的, ...

  4. 《程序猿的呐喊》读书笔记(下)

    接着<程序猿的呐喊>读书笔记(上).继续分享下篇.这次干货比較多哦.有静动态类型的优缺点.强弱类型系统的对抗.设计模式.程序猿的数学.编译器的重要性以及保守派自由派的较量,一时消化不了的建 ...

  5. 从此走上一条iOS程序猿不归路。。。

    新的城市,新的生活!前不久刚刚结束了苦逼的面试找工作之旅,期间也小有收货,如今正处年底工作闲暇之余,将前一阵子陆陆续续的总结整理了一下,本人菜鸟程序猿一只,水平有限,本文总结的知识不算深入,比较浅显, ...

  6. 一位Erlang程序猿的自白

    Erlang不能错过的盛宴 (快步进入Erlang的世界) 作者:成立涛 (litaocheng@gmail.com) 作为程序猿,我们以前闻听非常多"业界动态","技术 ...

  7. 程序猿推送利器:使用Python+Server酱打造微信通知推送利器

    你是否经历过服务器挂掉却浑然不知的彷徨?你是否感受过服务停止很久后才发现事情的严重的感觉?是的,你急需一款轻量级的推送通知系统! Server酱正是这么一款程序猿的好帮手,她通过提供一个超轻量级的AP ...

  8. 有个这样的程序猿男友你是否愿意嫁给他呢?

    我的男友,是程序猿. 是的,就是你们所认识的那种研究代码的程序员. 对于这样一群耀眼的互联网宠儿们,最常见的标签是高智商和低情商.见过不少女孩吐槽程序猿不懂浪漫和人情世故,比较木讷不会说话. 说白了, ...

  9. 程序猿小白应该注意什么 1

    在学校敲代码的时候,考虑的可能是怎么实现这个功能,怎么样把功能做的酷一点,可是当你进入了公司,你就会发现可能代码把功能实现是一方面的,你代码还需要良好的代码风格,命名规范,可读性易于维护,以及性能等等 ...

  10. [JQuery实现] 测测你今天的运势如何?(程序猿老黄历)

    用程序猿老黄历,来测测你的运势吧 写在前面 1. 什么是 JSON ? 2. 什么是 ajax 请求 ? 3. JQuery 简单开发 4. 程序猿老黄历实现 结束语 写在前面 本篇文章主要内容是通过 ...

最新文章

  1. 人工智能助力新材料研发
  2. c语言怎么在服务器端查询进程列表,C语言 在服务器端识别客户端的方法
  3. itcast-ssh-crm实践
  4. JavaWeb无限级分销结构分析
  5. rust 静态 android,rust android make
  6. Confluence介绍与使用
  7. c语言中取反符号的理解
  8. S40后台运行权限破解详尽图文
  9. Android中的Builder模式
  10. java分支讵_Java实现简体字向繁体字的转换
  11. 郭霖:手把手教你实现 App 360 度旋转看车效果
  12. 【科创人独家】华旦天使张洁:风口是创业者的造物,投资本质是件农活
  13. 计算几何(二) by邓俊辉老师
  14. qq空间显示手机型号android,qq发表说说怎么显示手机型号?手机QQ空间如何自定义手机型号?...
  15. 彻底解决电脑弹出USB设备时:提示该设备正在使用中无法弹出问题
  16. linux 根据字母产生颜文字 figlet
  17. DWM缩略图,但是使用的是IDCompositionVisual
  18. windows更换壁纸cmd命令,window修改注册表更换壁纸,已设壁纸缓存地址
  19. 计算机专业的具体能力和素质要求,计算机实验室管理员应具有的素质要求
  20. ubuntu安装与配置,pytorch-gpu+cuda+cudnn+anaconda+pycharm

热门文章

  1. 心情整天都在郁闷浮云往事如云烟,撕心裂肺:伤感心情日志
  2. 一步一步实现STM32-FOTA系列教程之STM32-FLASH分区说明
  3. 前端项目没数据?教你抓取各大网站api
  4. 28岁以后,我再也没为工作拼过命
  5. VS2005中UNICODE和ANSI以及MBCS的问题
  6. 消除Permission is only granted to system apps报错
  7. 父级fixed_相对于父元素的fixed定位的实现
  8. the little schemer 笔记(0)
  9. 专访Riverbed CEO:私有化和出售业务瘦身后的Riverbed更专注
  10. 掌握 Dojo 工具包