饥人谷技术博客

关于this的一点心得

2015-11-25  本文已影响73人  _咸鱼君

最初学习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的研究。

上一篇下一篇

猜你喜欢

热点阅读