最初学习js时,因为和面向对象语言中的语法混淆,一直认为this指向的是当前对象,在实际应用中吃了不少亏,今天根据之前阅读过的书和文章来讲解一下。
独立函数的调用:
function func(){
console.log(this);
}
func();//Window
这种模式是我们最常见的模式,在全局作用域中声明一个函数,并调用它,此时函数中的this指向全局对象。
作为对象方法调用:
function say(){
console.log(this);
}
var obj = {
name:"hehe",
say:say
};
obj.say();//Object {name: "hehe"}
当函数作为一个对象的方法调用时,函数中的this绑定到了这个对象。
使用call或apply来调用函数
function func(){
console.log(this);
}
var obj = {
name:"hehe"
};
func.call(obj);//Object {name: "hehe"}
func.apply(obj);//Object {name: "hehe"}
当使用call()或apply()函数进行函数调用时,传入参数对象的将被设置为函数体内this的值,这两个函数都是设置调用函数体内的this值的,且第一个参数都为this,区别是第二个参数apply()是一个参数组arguments,参数都是以数组[]的形式传入,而call(),传递给他的参数必须一个一个写出来。例如
function func(a,b){
console.log(a+b);
}
var obj = {
name:"hehe"
};
func.call(obj,1,2);//3
func.apply(obj,[1,2]);//3
new来调用函数
function Dog(name){
this.name = name;
console.log(this.name);
}
var dog = new Dog('hehe');//hehe
当使用new来调用一个函数时,会创建一个新的对象,然后绑定到Dog()调用中的this。
以上是我对this的一点粗略认识,还有许多细枝末节需要注意,这是我第一篇技术博客,之后在建立更全面的this知识体系后会调整风格完善关于this的研究。
网友评论