js中this是什么
定义:this是包含它的函数作为方法被调用时所属的对象
说明:1、包含它的函数2、作为方法被调用时3、所属的对象
例1:
function fu() {
var a = 10
console.log(this)//window
}
fu();
此时this的指向是window
例2:
var aa = {
names: '张新苗',
fu: function () {
console.log(this)//此时this的指向是整个aa
console.log(this.names);//张新苗 因为这个names在aa里
}
}
aa.fu()//
如果一个函数中有this,这个对象被上一级对象调用,那么this就指向它的上一级对象
例3:
var aa={
names:'张新苗',
bb:{
// names:'章绘绘',
fu:function(){
console.log(this)//此时this指向整个bb
console.log(this.names)//undefined 因为此时整个bb里并没有names所以是undefined
}
}
}
aa.bb.fu()
例5:
var aa={
names:'张新苗',
bb:{
names:'章绘绘',
fu:function(){
console.log(this)//此时this指向整个bb
console.log(this.names)//章绘绘 因为这个names在bb里
}
}
}
aa.bb.fu()
例6:
var aa={
names:'张新苗',
bb:{
names:'章绘绘',
fu:function(){
console.log(this)//此时this指向window
console.log(this.names)//undefined 因为window里找不到这个names
}
}
}
var cc=aa.bb.fu
cc()
如和改变this指向
var aa = '张玉芯'
var obj = {
aa: this.aa, //此时this是指外面的
cc: '美女',
dd: function (a, b) {
console.log(`${this.aa}是个大${this.cc}而${a}更是个${b}`) //张雨芯是个大美女而undefined更是个undefined
}
}
var newobj = {
aa: '曹慧洁',
cc: '美女'
}
obj.dd.call(newobj)//曹慧洁是个大美女而undefined更是个undefined
此时this指向已改变
改变this指向的方法
var aa = '章绘绘'
var obj = {
aa: this.aa, //此时this是指外面的
cc: '美女',
dd: function (a, b) {
console.log(`${this.aa}是个大${this.cc}而${a}更是个${b}`) //章绘绘是个大美女而undefined更是个undefined
}
}
var newobj = {
aa: '曹慧洁',
cc: '美女'
}
obj.start.call(newobj, '张雨芯', '美女'); //xx.call(新指向,后面可以直接加参数) //曹慧洁是个大美女而张玉芯更是个美女
obj.start.apply(newobj, ['张雨芯', '美女']); //xx.apply(新指向,后面跟的是数组)
obj.start.bind(newobj, '张雨芯', '美女')(); //xx.apply(新指向,后面可以直接加参数)() 再加一个自执行