javascript —— this
程序员文章站
2022-04-30 19:52:43
目录 为什么要讨论this this是什么 如何改变this的指向 为什么要讨论this this是什么 如何改变this的指向 为什么要讨论this 代码一: 会打印出什么呢?是 ' I am aa ' 吗, 结果是: 原因: 此时 this 指向 window 对象, this.aa 等同于 w ......
目录
为什么要讨论this
代码一:
function fun1(){ var aa = 'i am aa'; console.log(this.aa) } fun1();
会打印出什么呢?是 ' i am aa ' 吗,
结果是:
undefined
原因:
此时 this 指向 window 对象,
this.aa 等同于 window.aa ,
aa 是局部变量,aa 变量声明提前到全局,但是赋值是在函数里面,该值只在函数内部有效,
window.aa 访问不到函数内部的值,因此会打印 undefined。
代码二:
var fun2 = function(){ console.log(this.name); } var name = 'i am x - global'; var obj2 = { name: 'i am x - local', ff: fun2 } fun2(); obj2.ff();
结果是:
i am x - global i am x - local
fun2() 等同于 window.fun2() ,直接调用函数,此时所处 this 指向 window,
obj2.ff() 通过 obj2 对象访问其方法,这时 this 指向 obj2。
代码三:
var fun2 = function(){ console.log(this.name); } var name = 'i am x - global'; var obj2 = { name: 'i am x - local', ff: fun2, ff2: function(){ function fun3(){ console.log(this.name) } fun3(); } } fun2(); // global obj2.ff(); // local obj2.ff2(); //
结果:
i am x - global i am x - local i am x - global
就如下面定义所说的,
this 指向包含它的函数作为方法被调用时所属的对象。
此时 fun3 为函数,并非为绑定到对象上的方法。
this是什么
定义:this是指包含它的函数作为方法被调用时所属的对象。
我的理解:别调用时所处的上下文。
如何改变this的指向
- call()
- apply()
看一段代码
var name = "global name"; var obj1 = { name: 'obj1' } var obj2 = { name: 'obj2' } function myname(){ console.log(this.name); } myname() myname.call(obj1) myname.call(obj2)
结果:
global name obj1 obj2
call 改变了 this 的指向
call 和 apply 的区别
接受参数方式不同
object.call(obj, arg1, arg2, arg3)
object.apply(obj, [arg1, arg2, arg3])
上一篇: 对象转json字符串案例