this

一、this是js的一个关键字 指定一个对象然后去替代他    只研究函数内的this

分两种 函数内的this和函数外的this
1)函数内的this指向行为发生的主体
2)函数外的this都指向window ←←←没有意义

二、函数内的this和函数在什么环境下定义没有关系 而只和自己的主体有关。

三、主体怎么找??

就看这个函数(方法) 带不带“.”如果函数和方法执行了带“.”那么this 就指向“.”前面的对象
如果不带“.”就指向window

四、自执行函数里面的this都指向window

五、给元素中的某一个事件绑定方法 当事件触发时 执行绑定的方法 方法中的this指向当前元素

document.getelementbyid(“div1”).onclick=function(){console.log(this)}

重点:  函数套函数的时候    (不管他怎么定义 看他的主体)

做this题的时候记住几句话

1)函数内的this跟函数在哪定义没有关系只跟执行时的主体有关
2)带“.”的主体就是.前面的 不带.就是window

此案例test在执行的时候是在window下执行的  所以是答案12

此案例是把函数test 赋值给了ss  而ss在obj里面 在下面执行的时候ss前面加了obj.  找obj里面的x  所以答案是45

此案例obj里面的ss是个匿名函数 在匿名函数下 执行test这个函数     记住前面的两句话带“.”和不带“.”的问题

这里的test函数虽然说是在ss里面执行  但他的归属仍然是window  所以答案是12

此案例是在下方执行   带了“.”  所以dbl执行归属obj   第一个this就是obj

第二个是obj里面这个val *= 2 答案所以是4

第三个并没有添加this所以向外查找 找到外面的val  答案是1

如果dbl里面这个var val=45释放的话第三个答案就会是45

第一个是执行fun()    首先你要明白前面把a.say他的函数体 赋值给了fun 所以答案是222

第二个执行a.say()   say归属a 所以答案就是a里面的 111

第三个执行b.say(a.say)    但要注意这里有实参形参  可以直接理解为 fun = a.say 然后返回来在这个匿名函数里面执行这个fun()

此时的fun就是上面的a.say   但你要明白此时的fun()前面是没有“.”的他的归属是window 所以答案就是222

第四个执行b.say()  在这条上面吧a.say赋值给了b.say所以此时的b.say就是a.say了  如下图:

所以答案是333

案例text版本

// 案例1
var x = 12;
function test() {
console.log(this.x)
}
test()   //12

//案例2
var x = 12;
function test() {
console.log(this.x)
}
var obj={
x:45,
ss:test
}
obj.ss() //45

//案例3
var x = 12;
function test() {
console.log(this.x)
}
var obj = {
x:45,
ss:function(){
console.log(this)
test()
}
}
obj.ss() //12

//案例4
var val = 1
var obj = {
val : 2,
dbl : function() {
// var val = 45;
console.log(this); // obj
this.val *= 2;
console.log(this.val); // 4
console.log(val); // 1
}
}
var ff = obj.dbl()

最后一题

var name = "222";
var a = {
name : "111",
say : function() {
console.log(this.name)
}
}

var fun = a.say;
fun() // 222
a.say() // 111

var b = {
name : "333",
say : function(fun) {
fun();
}
}
b.say(a.say); // 222
b.say = a.say;
b.say() // 333

最新文章

  1. windows和linux之间“/”, "\\"的区别
  2. [译]:Orchard入门——给网站添加页面
  3. Android 拖动View View跟随手指一动
  4. AI (Adobe Illustrator)详细用法(三)
  5. 教你把UltraEdit如何注册激活教程及UltraEdit 22.0.0.48 官方中文版下载
  6. SVN检出资源文件
  7. 彻底删除mysql的方法(有隐藏文件)
  8. Eclipse 将projectBuild Path中引用的jar包自己主动复制到WEB-INF下的lib目录下
  9. IOS7 适配以及向下兼容问题
  10. 【转】ethtool 命令详解
  11. 【MVC】MvcPager分页及边界传递数据示例
  12. 关于h5使用bpmn.js
  13. 微信小程序,个人开发者创业新平台
  14. 以管理员身份运行CMD
  15. 未知行数的文字在div中垂直居中
  16. oracle 建表时显示ORA-00904无效的标识符
  17. EF Core 2.1 Raw SQL Queries (转自MSDN)
  18. 022:SQL优化--JOIN算法
  19. 6.19noip模拟赛总结
  20. HihoCoder1339 Dice Possibility(概率DP+母函数)

热门文章

  1. Angular12 学习angular2前的热身准备
  2. 树莓派 Learning 002 装机后必要的操作 --- 09 root用户 密码
  3. 【MySQL】MySQL悲观锁 + 事物 + for update 解决普通流量并发的问题
  4. LSI SAS 3008 Web配置操作
  5. Unity中限制轴向移动范围Mathf.Clamp
  6. Codeforces Round #517 (Div. 2, based on Technocup 2019 Elimination Round 2)D(思维,DP,字符串)
  7. hdu6055(求正方形个数)
  8. Mysql-5-数据表的基本操作
  9. 源代码实现一个binary例子
  10. mac安装scrapy