JavaScript This的指向——

This的指向——

1.普通对象的this:谁调用我,我就指向谁1

2.构造函数的this:指向实例化对象

3.监听器中的this:指向的是事件源 (绑定事件的节点)

4.普通函数的this:指向的是window

5.箭头函数中的this:取决于所处环境(声明的环境箭头函数没有argument和this.

//普通对象的this
let obj = {
      name = `xxx`,
      age = 20,
      gender = `male`,
      say(){
         console.log(`hello, my name is ${this.name}, i'm ${this.age} years old, i'm ${this.gender}`);
      }
}
let obj1 = {
      name = `xx`,
      age = 22,
      gender = `female`,
}
obj1.say = obj.say;
obj1.say();//输出"hello, my name is xx, i'm 20 years old, i'm female


//构造函数中的this
function Obj(name,age,gender){
    this.name = name;
    this.age = age;
    this.gender = gender;
}
let obj2 = new Obj(`qwe`,28,`male`);
console.log(obj2.age)//28 

//事件监听器中的this
let divEle = document.getElementsByTagName("div")[0];
divEle.addEventListener("click",function(e){
      console.log(this.nodeName);//DIV
})

//普通函数的this
function normalFn(){
  this.temp = 0;//相当于在全局 var temp = 0;
  console.log(this);//window
 }


//箭头函数的this   根据声明的环境的this指向决定
divEle.addEventListener("click",function(e){
      let fn = (a) => console.log(this); //divEle 
})
function normalFn(){
  let fn1 = (a) => console.log(this); //window
 }
 obj.say=function (){
   let fn2 = (a) => console.log(this); //obj
 }

改变this的指向

call

​ 书写格式:stu1.say.call(stu2,参数234)

​ 参数1:对象 将this指向它

​ 参数234:参数 调用函数的实参

apply

​ 书写格式:stu1.say.call(stu2,[参数2,参数3,参数4])

​ 同call 只是参数书写方式不同

bind

​ 书写格式:let fn = obj.f70.say.bind(obj1,参数234`);

​ 不会直接运行函数,会返回一个新函数

​ 接收返回值,需要的时候调用

注:bind中参数234可以在调用的时候写在fn中 所以bind只需要传对象即可

let obj = {
    name:`123`,
    innerObj:{
        name:"A",
        say(weitht,height){
            console.log(this.name,weitht,height);
        }
    }
}
let obj1 = {
    name:`abc`,
}
obj.innerObj.say.call(obj1,`60kg`,`188`); //abc,`60kg`,`188`
obj.innerObj.say.apply(obj1,[`60kg`,`188`]); //abc,`60kg`,`188`

let fazd = obj.f70.say.bind(obj1,`60kg`);
fazd(`188`); //abc,`60kg`,`188`
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值