this关键字

在了解this之前,我们先来先读一段文字:

从前有座山,
山里有座庙,
叫神庙,
神庙里面有很多和尚,
和尚都喜欢这座神庙,
于是和尚们经常挑水到这座神庙。

如果按照上面的读法,大家会发现,会出现很多次神庙,这样不仅不符合平常读写习惯,而且还很冗杂。

这个和我们在平常中写代码也一样,如果创建一个对象,对象里面有个函数,函数中会调用这个对象中的多个属性,如果我们每次都写这个属性的名字,属性名字很长的时候,不仅让无效代码量增加,还会让代码变的不整洁,这时候如果我们使用this,结果的效果将很大的优化,以下我们就来深入的研究一下,this的使用和绑定方式

默认绑定

function girl(){
    consloe.log(this)
}
girl()
复制代码

此时函数没有直接调用者,然后函数调用时,就会指向全局window对象,

隐式绑定

var girl = {
  name: '小红',
  age: 18,
  detail () {
    console.log('姓名' + this.name)
    console.log('年龄' + this.age)
  }
}
girl.detail()
复制代码

这里创建了一个girl对象,有属性和方法,每当我们调用这个对象的方法时,就会出现隐式绑定,隐式绑定直至this的调用的对象

硬绑定

var girlName = {
  name: '小红',
  sayName () {
    console.log(this.name)
  }
}

var girl1 = {
  name: '小黄'
}

var girl2 = {
  name: '小白'
}

girlName.sayName.call(girl1)
girlName.sayName.call(girl2)
girlName.sayName.apply(girl1)
girlName.sayName.apply(girl2)
复制代码

创建了一个对象,然后通过对象调用自己的方法,并且使用call和apply方法来改变this的指向,此时我们想绑定哪个对象就绑定哪个对象

构造函数绑定

function Love (name) {
  this.name = name
  this.sayName = function () {
    console.log(this.name)
  }
}

var name = '小白'
let xiaoHong = new Love('小红')
xiaoHong.sayName()
复制代码

这段代码会打印出 小红 ,因为在new一个构造的函数的实例时,就新开辟了一个空间,而为什么会是小红呢,因为我们已经复制了一个Love。

当然如果要很好的使用this关键字,就一定要熟悉call,apply,bind这三个方法,在这里就不做过多的介绍,后面我会再详细的说明这个三种方法

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享