在Javascript中this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定,this最终指向调用它的对象。总结一句,就是函数的调用方式决定了this指向。
调用方式
普通函数调用
作为方法来调用
作为构造函数来调用
使用apply/call/bind方法来调用
一,普通函数调用
var name = "window"
function person(){
var name = "person"
console.log(this.name);
}
person(); //输出 window
person作为window的方法来调用,this指向调用者window,所以this.name = "window" 二,作为方法来调用
var name = "window"
var person = {
name:"person",
showName:function(){
console.log(this.name)
}
}
var person2 = {
name:"person2",
showName2:person.showName
}
var showName3 = person.showName
person.showName(); //输出 person
person2.showName2(); //输出 person2 虽然showName方法是在person这个对象中定义,但是调用的时候却是在person2这个对象中调用,因此this指向person2
showName3(); //输出 window 同理
三,作为构造函数来调用
构造函数与普通函数的区别就是,构造函数的目的是用来构造对象的,构造对象的方式就是使用new 关键字 ,如何通过构造函数给对象添加属性?就是使用this关键字,所以构造函数中的this指向的是它实例化的对象
function person(){
this.sex='female';
this.age=''20'
};
var xiaoming=new person();//js在执行到此条语句时,将this的引用指向了xiaoming
console.log(xiaoming.age),//执行结果 20
四,使用apply/call/bind方法来调用
apply/call/bind方法能改变this关键字的指向,但还是谁调用this指向谁
原文地址:www.cnblogs.com/cuijinlin/p…