JavaScript基础概念之----this关键字

创建函数时,系统会(在后台)创建一个名为 this 的关键字,它链接到运行该函数的对象。

var person = {
    name:'adhehe',
    age:23,
    getName:function(){
     // return person.name
return this.name } } //person.getName() 输出adhehe

this 值会被传递给所有函数,其值基于在运行时调用函数的上下文。

var a = 1;
var o = { a:2 }
var func = function(){
    return this['a']
}

o.func = func;

o.func() //输出2
func() //输出1

在嵌套函数中使用this关键字,引用head对象(即window)

var o = {
    func1:function(){
        console.log(this) //输出o
        
        var func2 = function(){
            console.log(this) //输出window,从此处开始this都是window对象

            var func3 = function(){
                console.log(this) //输出window
            }()
        }()
    }
}

o.func1()

当匿名函数在函数内部调用时,匿名函数内的this值将是对head对象的引用(即window)

var o = {
    func1:function(func){
        func(); //输出window
        console.log(this) //输出o
    }
}

o.func1(function(){
    console.log(this)
})

可以简单地在父函数中使用作用域链来保留对 this 的引用。

var o = {
    func1:function(){
        var that = this;
        console.log(this) //输出o
        
        var func2 = function(){
            console.log(that) //输出o

            var func3 = function(){
                console.log(that) //输出o
            }()
        }()
    }
}

o.func1()

使用 new 关键字调用函数时,this 值引用实例本身。

原型方法内的this关键字引用构造函数实例,即在prototype对象中的方法内部使用this关键字时,this可用于引用实例。如果该实例不包含所要查找的属性,则继续在原型上查找。

原文地址:https://www.cnblogs.com/adhehe/p/9786606.html