В лекции под названием "Путь вперед" Дуглас Крокфорд разделяет, что он больше не использует "новый" в своем JavaScript и отлучает себя от "this". Он говорит, что хорошей функцией JavaScript было не столько прототипное наследование, сколько классное наследование. Он предлагает следующий фрагмент, который определяет его объекты:
function constructor(init) {
var that = other_constructor(init),
member,
method = function () {
// init, member, method
};
that.method = method;
return that;
}
Он объясняет:
У меня есть функция, которая потребует некоторого значения для ее инициализации. Я рекомендую быть объектом (таким образом, вы можете использовать текст JSON, который вы можете использовать для создания новых экземпляров). Вы можете вызвать другой конструктор, если хотите наследовать его; в любом случае вы собираетесь создать объект и поместить его в переменную с именем "that" . Вы создадите все свои переменные-члены (вещи, которые станут свойствами объекта, ваши переменные метода, вещи, которые будут действовать на объект...), эти методы будут функциями, которые будут закрываться по значению инициализации по всем переменным-членам и всем переменным метода.
Он также может использовать "this" и "that" , но я не рекомендую. Причина этого не в том, что если он не использует "this" или "that" , тогда вы можете вывести любую из функций из объекта и вызвать их независимо, и они все равно будут делать то же самое. Это повышает надежность языка. Также означает, что вы можете передать любую из этих вещей, использовать ее в качестве обратного вызова без необходимости связывать что-либо (он просто становится более надежным). Затем любые методы, которые должны быть общедоступными или привилегированными, вы просто присоединяете их к объекту и возвращаете объект. Это действительно гибкий шаблон: вы можете получить множественное наследование, вы можете получить аспекты, вы можете получить фабрики - многое из того, что вы можете сделать с этим базовым шаблоном.
Почему этот сниппет делает следующее задание?
that.method = method
Какую цель выполняет метод? Как он инициализируется? Какова цель объявления объектов таким образом?
Его лекция была довольно общей, и он потратил минуту на эту часть этого, не уточнив свои рассуждения или ссылаясь на ресурсы. Может ли кто-нибудь пролить свет на мотивацию для этого стиля программирования?
Ссылка на видео: https://www.youtube.com/watch?v=3WgVHE5Augc Начните с отметки 37 минут.