JS 为啥需要 this, this是干嘛的?

117 阅读1分钟

这里理解this(笔记)

1. 例子一

const obj = {
    name: '',
    x: function() {
        console.log('你好', name)
    }
}
// 1. 这里怎么拿到 name
// 2. 现在是拿不到的
// 3. 有人会想, this.name, 如果没有this呢
// 3. 那会就是下面这样
const obj = {
    name: '',
    x: function() {
        console.log('你好', obj.name)
    }
}
// 4. 但是又不对了, 如果代码是这样的呢??
{
    name: '',
    x: function() {
        console.log('你好', obj.name)
    }
}
// 5. 前面那样要是不对, 要是这样的呢???????
const fun = ({
    name: '',
    x: function() {
        console.log('你好', obj.name)
    }
}) => {}
// 6. 现在没有对象名字吧, 所以怎么拿到name

例子二

// 可能js之父是这样想的(大概是下面这么个意思, 方便理解this吧, 往下看)
// 发明js的时候, 例如: python遇到这种情况这样解决的(这我也不确定)
const obj = {
    name: '1111',
    x: fun
}
const fun = function (self, arg) {
    console(self.name, arg)
}
// 假设当前没this
obj.x(obj, '参数')
// 1. 这就是python的想法, 通过吧第一个参数当成this
// 2. 然后js之父感觉这样有些初级选手看不懂, 就把self隐藏起来, 不显示的是传
###  3. 就是函数直接调用如 fun(), self就隐式传空, 通过对象调用, self就传obj
// 3. 但是还不行, 还有些人理解不行, 就想了call()这个方法, 去传一个this, 也就是刚才的self参数加上你想传的参数,所以就有了this的6中情况, 其实this可以有好多情况, 随便举例就是this的特殊情况
// 4. 所以箭头函数没有this, 就是他不能隐式的传self这样的参数, 也没有argments

通过例子大概this是个啥就都知道了