前言:this指向的是一個對象进副,具體指向的是哪個對象由函數(shù)調(diào)用方式來決定这揣。
為什么要使用this?
答案:在調(diào)用函數(shù)的時候可以少傳一個參數(shù),是代碼更靈活影斑,復(fù)用性更好
var obj01 = {name : "小白"};
var obj02 = {name : "小黑"};
function showName(){
console.log(this.name);
}
obj01.showName = showName;
obj02.showName = showName;
obj01.showName();
obj02.showName();
this到底指向誰呢给赞?具體由函數(shù)的調(diào)用方式來決定
- 001 以普通函數(shù)的方式來調(diào)用,在非嚴(yán)格模式下矫户,指向window,在嚴(yán)格模式下片迅,指向undefined
- 002 以對象的方法來調(diào)用,this指向調(diào)用方法的對象
- 003 以構(gòu)造函數(shù)的方式來調(diào)用皆辽,this指向的是構(gòu)造函數(shù)內(nèi)部新創(chuàng)建的對象
- 004 以上下文的方式來調(diào)用(call | apply)柑蛇,this指向第一個參數(shù)
demo1 以普通函數(shù)的方式來調(diào)用,在非嚴(yán)格模式下驱闷,指向window,在嚴(yán)格模式下耻台,指向undefined
<script>
"use strict";
function foo(){
console.log(this);
}
foo();
</script>
demo2 以對象的方法來調(diào)用,this指向調(diào)用方法的對象
<script>
var obj = {
name : "小白",
showName : function(){
console.log(this);
console.log(this.name);
}
}
obj.showName();
</script>
demo3 以構(gòu)造函數(shù)的方式來調(diào)用空另,this指向的是構(gòu)造函數(shù)內(nèi)部新創(chuàng)建的對象
<script>
function Foo(){
this.name = "默認(rèn)";
this.age = 18;
this.showName = function(){
console.log(this);
console.log(this.name + ' -' + this.age);
}
}
var foo = new Foo();
foo.showName();
</script>
demo4 以上下文的方式來調(diào)用(call | apply)盆耽,this指向第一個參數(shù)
<script>
var obj1 = {
name : "默認(rèn)",
sayHi : function(){
console.log(this.name + '在 say Hi~');
}
};
var obj2 = {
name : "小白"
}
obj1.sayHi.call(obj2); //小白在 say Hi~
</script>