博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Js中的this关键字(吉木自学)
阅读量:5013 次
发布时间:2019-06-12

本文共 1351 字,大约阅读时间需要 4 分钟。

研究生毕业答辩完,开始继续为转行努力。小白要奋斗了,加油。本文引自 。

在一个函数中,this总是指向当前函数的所有者对象,this总是在运行时才能确定其具体的指向, 也才能知道它的调用对象。

1 window.name = "window";2 function f(){3     console.log(this.name);4 }5 f();//输出window6 7 var obj = {name:'obj'};8 f.call(obj); //输出obj

在执行f()时,此时f()的调用者是window对象,因此输出"window"。

f.call(obj) 是把f()放在obj对象上执行,相当于obj.f(),此时f中的this就是obj,所以输出的是"obj"。

 code1:

1 var foo = "window"; 2 var obj = { 3     foo : "obj", 4     getFoo : function(){ 5         return function(){ 6             return this.foo; 7         }; 8     } 9 };10 var f = obj.getFoo();11 console.log(1+":"+f()); //输出window

 code2:

1 var foo = "window"; 2 var obj = { 3     foo : "obj", 4     getFoo : function(){ 5         var that = this; 6         return function(){ 7             return that.foo; 8         }; 9     }10 };11 var f = obj.getFoo();12 console.log(f()); //输出obj

code1:

执行var f = obj.getFoo()返回的是一个匿名函数,相当于:
var f = function(){
return this.foo;
}
f() 相当于window.f(), 因此f中的this指向的是window对象,this.foo相当于window.foo, 所以f()返回"window"

code2:

执行var f = obj.getFoo() 同样返回匿名函数,即:
var f = function(){
return that.foo;
}
唯一不同的是f中的this变成了that, 要知道that是哪个对象之前,先确定f的作用域链:f->getFoo->window 并在该链条上查找that,此时可以发现that指代的是getFoo中的this, getFoo中的this指向其运行时的调用者,从var f = obj.getFoo() 可知此时this指向的是obj对象,因此that.foo 就相当于obj.foo,所以f()返回"obj"。

对作用域链不清楚的同学可以参看。

 

转载于:https://www.cnblogs.com/jkj-jim/p/6479930.html

你可能感兴趣的文章
前端面试题汇总(持续更新...)
查看>>
如何成为F1车手?
查看>>
QT自定义消息
查看>>
Save (Not Permitted) Dialog Box
查看>>
装饰模式(Decorator)
查看>>
任务13:在Core Mvc中使用Options
查看>>
利用Excel 2010数据透视图实现数字的可视化的图形直观展示
查看>>
Sort Colors
查看>>
iview树的修改某个节点,树刷新后自动展开你刚才展开的所有节点
查看>>
oracle服务起不来以及无法监听问题解决
查看>>
Mvc--Html.ActionLink()的用法
查看>>
delphi 基础书籍推荐
查看>>
《面向对象程序设计》2018年春学期寒假及博客作业总结
查看>>
iOS开发UI之KVC(取值/赋值) - KVO (观察某个对象的某个属性的改变)
查看>>
1.7 将一个MxN矩阵所有为0的元素所在行和列全部置0
查看>>
删除U盘时提示无法停止‘通用卷’设备的解决方法!!不要每次都硬拔了,对电脑有不小的损害!!!...
查看>>
Java中接口与接口和类之间的关系
查看>>
芯片TPS70925
查看>>
linux shell 发送email 附件
查看>>
人群密度估计 CrowdCount
查看>>