首页 > 代码库 > JavaScript中的this
JavaScript中的this
console.log(this);//window
function xioahua(){ console.log(this);}xiaohua();//普通函数调用//window
‘use strict‘function xiaohua(){ console.log(this);}xiaohua();//严格模式下函数调用//undefined(function xiaohua(){ ‘use strict‘ console.log(this); })()//让他在严格模式下立即调用//undefind
var obj={ name:‘xiaohua‘, foo:function(){ console.log(this.name) }}obj.foo();//作为对象的方法调用//xiaohua
function test(){ console.log(this.name);}var obj={ name:‘xiaohua‘, foo:test}obj.foo();//作为对象的方法调用//xiaohua//解释:同样不变,因为在 js 中一切都是对象,函数也是一个对象,对于 test ,它只是一个函数名
,函数的引用,它指向这个函数,当 foo = test,foo 同样也指向了这个函数。如果把对象的方法赋
值给一个变量,然后直接调用这个变量呢:
var obj={ name:‘xiaohua‘, foo:function(){ console.log(this); } }var xiaohuadawang=obj.foo;xiaohuadawang();//作为对象的方法调用//Window//解释:可以看到,这时候 this 执行了全局,当我们把 test = obj.foo ,test 直接指向了一个函数的引用
,这时候,其实和 obj 这个对象没有关系了,所以,它是被当作一个普通函数来直接调用,因此,this 指向全局对象。
var obj={ name:‘xiaohua‘, foo:function(){ console.log(this); }, foo2:function(){ console.log(this); setTimeout(this.foo,100); }}obj.foo2();//obj...//window//解释:执行这段代码我们会发现两次打印出来的 this 是不一样的:
第一次是 foo2 中直接打印 this,这里指向 obj 这个对象,我们毋庸置疑;
但是在 setTimeout 中执行的 this.foo ,却指向了全局对象,这里不是把它
当作函数的方法使用吗?这一点经常让很多初学者疑惑;其实,setTimeout 也只
是一个函数而已,函数必然有可能需要参数,我们把 this.foo 当作一个参数传给
setTimeout 这个函数,就像它需要一个 fun 参数,在传入参数的时候,其实做
了个这样的操作 fun = this.foo,看到没有,这里我们直接把 fun 指向 this
.foo 的引用;执行的时候其实是执行了 fun() 所以已经和 obj 无关了,它是被
当作普通函数直接调用的,因此 this 指向全局对象。这个问题是很多异步回调函
数中普遍会碰到的;
JavaScript中的this
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。