fn1() // this === window虽然指定fn1 = a.fn,但是调用是有window调用,所以this 为window
this
有多种使用场景,下面我会主要介绍 4 个使用场景:
1. 作为构造函数执行
functionStudent(name,age) { this.name = name // this === s this.age = age // this === s //return this }
var s = new Student("前端开发爱好者",30)
首先
new
字段会创建一个空的对象,然后调用
apply()
函数,将
this
指向这个空对象。这样的话,函数内部的
this
就会被空对象代替。
作为普通函数执行
functionfn () { console.log (this) // this === window }
fn ()
作为对象属性执行
var obj = { name : "A", printName : function () { console.log (this.name) // this === obj } }
obj.printName ()
call()
,
apply()
,
bind()
三个函数可以修改
this
的指向,具体请往下看:
var name = "小明" , age = "17"
var obj = { name : "安妮", objAge : this.age, fun : function () { console.log ( this.name + "今年" + this.age ) } } console.log(obj.objAge) // 17 obj.fun() // 安妮今年undefined
var name = "小明" , age = "17" var obj = { name : "安妮", objAge :this.age, fun : function (like,dislike) { console.log (this.name + "今年" + this.age ,"喜欢吃" + like + "不喜欢吃" + dislike) } }