js中this是什么
定義:this是包含它的函數(shù)作為方法被調(diào)用時(shí)所屬的對象
說明:1、包含它的函數(shù)2、作為方法被調(diào)用時(shí)3、所屬的對象
例1:
function fu() {
var a = 10
console.log(this)//window
}
fu();
此時(shí)this的指向是window
例2:
var aa = {
names: '張新苗',
fu: function () {
console.log(this)//此時(shí)this的指向是整個(gè)aa
console.log(this.names);//張新苗 因?yàn)檫@個(gè)names在aa里
}
}
aa.fu()//
如果一個(gè)函數(shù)中有this,這個(gè)對象被上一級對象調(diào)用,那么this就指向它的上一級對象
例3:
var aa={
names:'張新苗',
bb:{
// names:'章繪繪',
fu:function(){
console.log(this)//此時(shí)this指向整個(gè)bb
console.log(this.names)//undefined 因?yàn)榇藭r(shí)整個(gè)bb里并沒有names所以是undefined
}
}
}
aa.bb.fu()
例5:
var aa={
names:'張新苗',
bb:{
names:'章繪繪',
fu:function(){
console.log(this)//此時(shí)this指向整個(gè)bb
console.log(this.names)//章繪繪 因?yàn)檫@個(gè)names在bb里
}
}
}
aa.bb.fu()
例6:
var aa={
names:'張新苗',
bb:{
names:'章繪繪',
fu:function(){
console.log(this)//此時(shí)this指向window
console.log(this.names)//undefined 因?yàn)閣indow里找不到這個(gè)names
}
}
}
var cc=aa.bb.fu
cc()
如和改變this指向
var aa = '張玉芯'
var obj = {
aa: this.aa, //此時(shí)this是指外面的
cc: '美女',
dd: function (a, b) {
console.log(`${this.aa}是個(gè)大${this.cc}而${a}更是個(gè)$`) //張雨芯是個(gè)大美女而undefined更是個(gè)undefined
}
}
var newobj = {
aa: '曹慧潔',
cc: '美女'
}
obj.dd.call(newobj)//曹慧潔是個(gè)大美女而undefined更是個(gè)undefined
此時(shí)this指向已改變
改變this指向的方法
var aa = '章繪繪'
var obj = {
aa: this.aa, //此時(shí)this是指外面的
cc: '美女',
dd: function (a, b) {
console.log(`${this.aa}是個(gè)大${this.cc}而${a}更是個(gè)$`) //章繪繪是個(gè)大美女而undefined更是個(gè)undefined
}
}
var newobj = {
aa: '曹慧潔',
cc: '美女'
}
obj.start.call(newobj, '張雨芯', '美女'); //xx.call(新指向,后面可以直接加參數(shù)) //曹慧潔是個(gè)大美女而張玉芯更是個(gè)美女
obj.start.apply(newobj, ['張雨芯', '美女']); //xx.apply(新指向,后面跟的是數(shù)組)
obj.start.bind(newobj, '張雨芯', '美女')(); //xx.apply(新指向,后面可以直接加參數(shù))() 再加一個(gè)自執(zhí)行