欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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 的指向

 

callapply 的区别

接受参数方式不同

object.call(obj, arg1, arg2, arg3)

object.apply(obj, [arg1, arg2, arg3])