- this指针通常都是和函数一起使用
- 在函数外this指针指向window(一般不会用,只有在局部变量覆盖全局变量时才会使用)
var test='global';
function cover(){
var test='scope';
console.log(window.test, test);
}//global,scope
在函数内:
3.1 函数在定义时,无法确定this指针的指向,只有在函数调用时,才能确定this指针的指向
3.2 在函数执行时,this指针的指向,默认情况下,取决于函数的调用方式
3.2.1 函数如果通过一个对象的方法 的方式调用,那么this指针,指向前面的对象(例如xxx.sayHi(),sayHi函数内的this指向xxx)
3.2.2 如果函数通过普通方式调用,那么this指针指向window(例如sayHi(),sayHi()函数内的this指向window)
3.3 可以人为的指定this指针的指向
3.3.1 调用一个函数的方法call,这个方法接受若干个参数,第一个参数是this指向的对象,后面的参数是需要传递给原函数的参数(函数是一个object类型,有方法和属性)
3.3.2 调用一个函数的方法apply,这个方法接受连个参数,第一个参数是this指向的对象,第二个参数是一个数组,数组的每个元素是传递给原函数的参数
var person={
my_name:'innerObject',
sayHi:function(){
console.log('Hi, I am ' + this.my_name)
}
}
person.sayHi() //Hi, I am innerObject
var my_name='globalVariable'
function sayHi(){
console.log('Hi, I am ' + this.my_name)
}
sayHi()//i, I am globalVariable
var hello=person.sayHi;//把函数存入hello,person.sayHi并未调用,加()才是调用
hello()//i, I am globalVariable
person.hello=sayHi;
person.hello() //Hi, I am innerObject 通过对象调用
var human={
name:'outer',
person:{
name:'inner',
sayHi:function(){
console.log('Hi, I am ' + this.name)
}
}
}
human.person.sayHi()//Hi, I am inner this总是指向离它最近的那个对象
document.querySelector('button').onclick=function(){
console.log(this)
} //取到的是一个对象,this指向button
setTimeout(function(){
console.log(this)
//this指向window
},1000)
//调用全局的introduce函数,并让this指向detail对象
function introduce(from, intend){
console.log(this.name, from, intend)
}
var detail={
name:'Adam',
}
introduce.call(detail, 'America', 'England')// Adam America England
introduce.apply(detail, ['China', 'Russia'])// Adam China Russia
var numbers=[2,3,9,5,10];
console.log(Math.min.apply(Math,numbers))// 2
网友评论