
Как быстро начать работу с VUE3.0: Изучите
В различных введениях, которые мы видели, как определить метод указания this, предложение «это в конечном итоге указывает на объект, который его вызывает». ядро, но перед лицом Мы склонны путаться в самых разных ситуациях. Основываясь на моем понимании различных ситуаций, я выдвинул предложение : «Стрелки, время и структура, смотрите на особые ситуации, смотрите на номер точки для обычных вызовов, не смотрите вперед для более поздних точек, а затем судите по ближайшему принципу, и последнее, что осталось — это окно» .
Стрелочная функция
Сама по себе стрелочная функция не имеет этого изменения, поэтому она фиксирует внешнее значение this с помощью
var name = "windowsName";
вар а = {
название: "Вишня",
фн() {
setTimeout(()=>{
console.log(это.имя);
},0)
}
}
a.fn() //Анализ Cherry : сначала объект a вызывает функцию fn, так что this из функции fn указывает на объект a, а затем стрелка захватывает внешний this, тогда в setTimeout это не this, а this из функцию fn, поэтому в конце получите имя в объекте a.
Таймер
этой функции обратного вызова внутри функции задержки указывает на окно глобального объекта
var name = "windowsName";
вар а = {
название: "Вишня",
фн() {
setTimeout(функция (){
console.log(это.имя);
},0)
}
}
a.fn() // анализ имени окна: сначала объект a вызывает функцию fn, а затем функция обратного вызова в setTimeout здесь является анонимной функцией, которая является обычной функцией. Затем это в анонимной функции указывает на
имя окна var =. "имя окна";
вар b={
имя: "setTimeoutName"
}
вар а = {
название: "Вишня",
фн() {
setTimeout((функция (){
console.log(это.имя);
}).bind(б),0)
}
}
a.fn() // анализ setTimeoutName : сначала объект a вызывает функцию fn, а затем функция обратного вызова в setTimeout здесь является анонимной функцией, которая является обычной функцией. Затем это в анонимной функции указывает на окно, но. используйте привязку для изменения анонимной функции. This указывает на объект b, поэтому
конструктор
именив объекте b, наконец, указывает на созданный объект экземпляра в конструкторе.
Примечание. Если объект возвращается в конструкторе, нового экземпляра не будет. объект при создании, но этот Объект, возвращаемый
функцией fn(){
this.age = 37;
}
вар а = новый ФН ();
console.log(a.age); // 37;
а.возраст = 38;
console.log(fn); // { this.age = 37;
console.log(a.age); // 38 Анализ: здесь мы создаем объект экземпляра a через конструктор, что эквивалентно открытию нового места и копированию содержимого конструктора. Затем у нас есть объект At. раз это указывает на объект. a, наша модификация содержимого в объекте a не влияет на вынесение
решения о количестве
точек конструктора. Оцените этот момент и следуйте принципу близости
var a = {.
возраст: 10,
б: {
возраст: 12,
фн(){
console.log(this.age);
}
}
}
abfn(); //12 Анализ: объект a вызывает функцию fn объекта b. Перед функцией fn стоят два . Тогда ближайший из них — объект b, поэтому эта функция fn указывает на объект b, и последнее, что получено, — это возраст объекта b
var a = { .
возраст: 10,
б: {
возраст: 12,
фн(){
console.log(this.age); //не определено
}
}
}
вар c = {
возраст: 20,
}
вар d = {
возраст: 30,
}
abfn.bind(c).bind(d)(); //20 анализ: объект a вызывает функцию fn объекта b, а затем использует привязку для изменения направления. В это время fn имеет . независимо от предыдущего . Просто посмотрите назад, а затем последняя привязка меняет эту точку на c, тогда эта точка функции fn является объектом c, и вы получаете функцию возрастной
практики
externalFunc() { из объект с
console.log(this) // { x: 1 }
функция func() {
console.log(this) // Окно
}
веселье()
}
externalFunc.bind({ x: 1 })() obj = {
функция() {
константная стрелкаFunc = () => {
console.log(this._name)
}
возврат стрелкаFunc
},
_name: "объект",
}
obj.func()() //объект
func = obj.func
func()() //не определено
obj.func.bind({ _name: "newObj" })()() //newObj
obj.func.bind()()() //не определено
obj.func.bind({ _name: "bindObj" }).apply({ _name: "applyObj" })() //bindObj Используйте функции Apply, Call и Bind, чтобы изменить направление. this. Вышеупомянутое this
Разница между
thisArg , [ argsArray] call(thisArg, arg1, arg2, ...)
Разница между функциями apply и call заключается в параметрах, передаваемых после этого. в apply - это массив, и то, что передается в вызове. Это расширенный параметр
bind(thisArg[, arg1[, arg2[, ...]]])()
this обозначается как bind() . Первый параметр, а остальные параметры будут использоваться в качестве параметров новой функции для использования при вызове.Если есть какие-либо ошибки, пожалуйста, исправьте меня! ! Спасибо всем за чтение!
Справочный материал
https://juejin.cn/post/6946021671656488991#comment
[Рекомендации по соответствующему видеоуроку: веб-интерфейс]
Выше описано, как можно понять проблему указывания в JS? Ознакомьтесь с подробностями этой статьи. Для получения дополнительной информации обратите внимание на другие статьи по теме на китайском веб-сайте php!
