Я могу изменить контекст JavaScript “это”?

Мнение: большая часть кода там дерьмовая, потому что именно этого хотят программисты.

Косвенно, мы взращивали культуру чрезвычайного творчества. Дело не в том, что я не думаю, что решение проблем имеет творческие элементы - оно есть - просто это даже отдаленно не то же самое, что рисование (см. Знаменитое эссе Пола Грэма «Хакеры и художники»).

Если мы склоняем нашу индустрию к этому подходу, в конечном итоге это означает, что каждый программист может пойти дальше и уничтожить все, что им нужно, очень креативные, сумасшедшие вещи. Конечно, для любого значительного проекта попытка объединить десятки несвязанных, неструктурированных, незапланированных бит в один финальный связный бит не будет работать по определению. Это не предположение или оценка, это состояние отрасли, с которой мы сталкиваемся сегодня. Сколько раз вы видели функциональные фрагменты в основной программе, которые полностью не соответствовали остальному коду? Сейчас это так распространено, что удивительно, что кто-то может использовать любой из этих беспорядков.

Запутанные, сложные, уродливые вещи, которые становятся все хуже и нестабильнее. Если бы мы строили что-то физическое, все на планете говорили бы нам о том, насколько ужасно уродливы и испорчены эти вещи, но, поскольку они более или менее скрыты, будучи виртуальными, мы можем сойти с рук с некоторыми из худших производственных процессов. что наш вид когда-либо увидит. (Можете ли вы представить себе автомобиль, в котором четыре разных человека сконструировали четыре разных колеса четырьмя различными способами?)

Но грустная часть, противоречивая часть всего этого, состоит в том, что нет абсолютно НИКАКОЙ причины для этого будь таким образом, за исключением исторической культуры культура была направлена ​​на большую свободу и меньшую организацию, поэтому мы остались такими (и, вероятно, стали намного хуже). Разработка программного обеспечения - это шутка, но это шутка, потому что программисты хотят, чтобы это было (но никогда бы через миллион лет не признали, что это правда, «заговор со стороны руководства» - лучшая причина для большинства людей).

Как долго мы будем продолжать стрелять себе в ногу, прежде чем мы проснемся и поймем, что мы единственные, кто держит пистолет, направляет его и также нажимает на курок?

Пол.

26
задан Brian Tompsett - 汤莱恩 27 August 2019 в 21:16
поделиться

3 ответа

Нет, это невозможно.

Вы можете вызвать метод с указанным значением для this (используя method.apply () / method.call () ), но вы не можете повторно назначить ключевое слово this .

44
ответ дан 28 November 2019 в 06:42
поделиться

You can't change what this refers to from inside the function.

However, you can call a function in a specific context - so that this refers to a specific object - by using call or apply.

9
ответ дан 28 November 2019 в 06:42
поделиться

JP правильный. Это невозможно. См. Документ спецификации языка JavaScript ECMA-262. Вы можете скачать стандарт здесь:

http://www.ecma-international.org/publications/standards/Ecma-262.htm

Это файл ECMA-262.pdf и на странице 39, раздел 10.1 .7.

10.1.7 This

Имеется значение this, связанное с каждый активный контекст выполнения. В это значение зависит от вызывающего абонента и тип выполняемого кода и определяется, когда контроль переходит в контекст исполнения. Это значение связанный с контекстом выполнения неизменяем.

Примечание "неизменяемо". т.е. не может быть изменено.

7
ответ дан 28 November 2019 в 06:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: