在了解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