this的四个绑定规则

this

有四种绑定规则

1、默认绑定规则 : 直接调用 test() 指向的是 window
function func1(){
  console.log(this);
}
func1();  // window
2、隐式绑定: 当调用一个对象的方法的时候,就会产生隐式绑定 此时的 this 指向的是 调用该函数的 对象
    var red = {
      name: 'lmj',
      age: 18,
      detail: function (){
        console.log(this.name); // lmj
        console.log(this.age); // 18
        console.log(this);
      }
    }
    red.detail();  // 这里的 this指向的是 red
3、硬绑定: 使用apply /call 来强行绑定某一个对象 this 指向 call/apply(obj) obj
var red = {
  name: 'lmj',
  age: 18,
  detail: function (){
    console.log(this.name); // lmj
    console.log(this.age); // 18
    console.log(this);
  }
}
red.detail();  // 这里的 this指向的是 red

var green = {
  name: 'xyy',
  age: 18
}

var blue = {
  name: 'ljl',
  age: 18
}

red.detail.call(green); // 这里输出的就是 xyy, 18 green
red.detail.apply(blue); // 这里输出的就是 ljl, 18 blue
4、构造函数绑定: 在一个对象中,使用构造函数样子的绑定后,this 将一直指向 该对象
function Lover(name) {
  this.name = name;
  this.sayName = function () {
    console.log('姓名是: ', this.name);
    console.log(this);  // 指向 person
  }
}
var name = '刘明杰'
var xiaohong = new Lover('小红')
xiaohong.sayName();  // 打印 小红  person
习题:
var name = '小红'
function a(){
  var name = '小白'
  console.log(this.name);
}

function d(i){
  return i()
}

var b = {
  name: '小黄',
  detail: function (){
    console.log(this.name);
  },
  bibi: function (){
    return function (){
      console.log(this.name);
    }
  }
}

var c = b.detail;
b.a = a;
var e = b.bibi();
a(); // 小红
c(); // 小红
b.a(); // 小黄
d(b.detail); // 小红
e(); // 小红

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值