Давайте go шаг за шагом.
- пример: а) вы определяете функцию, которая возвращает объект (осторожно с объявлением переменной - вы должны объявить его с ключевым словом
var
, чтобы охватить его для вашей функции. Этот объект имеет единственное свойство, которое указывает на функцию. Тем не менее, Ваша первая функция назначена переменной myfunc
Теперь, если вы попытаетесь вызвать myfunc()
, вы получите объект с единственным свойством function1
. Здесь нет ничего особенного. б) вы снова определяете функцию и присваиваете ее переменной myfunc
, только на этот раз она содержит ключевое слово this
, которое предполагает, что вы пытаетесь использовать эту функцию в качестве конструктора . В этом примере простой вызов myfunc
не приводит к выводу, поскольку вы ничего не возвращали из функции. Однако вызов функции с предшествующим ключевым словом new
приведет к созданию объекта.
var myObj = new myfunc();
// `this` keyword now refers to myObj which means myObj can call `function1`
пример: а) На правой стороне находится то, что называется IIFE (или выражение немедленного вызова функции). По сути, это выражение функции, которое создается и выполняется, ну, немедленно. Так что
func
должен получать все, что возвращает эта функция. б) И снова, обращаясь к конструктору, только на этот раз
вы фактически предполагали, что
myfunc
является конструктором, когда вы добавили ключевое слово
new
перед выполнением
myfunc
. Создает объект, на который c
newfunc
теперь указывает и имеет власть над ним.
Примечание: В функциях конструктора (те, которые вы вызываете с ключевым словом new
) ), this
неявно возвращается и не требует явного возврата. Теперь, если вы хотите проверить это и вернуть что-то еще, я оставлю это на ваше усмотрение, чтобы изучить и посмотреть, чем вы закончите. :)
Поскольку это более широкое топи c само по себе, я рекомендую эту превосходную книгу Николаса Закаса. Он действительно отвечает на множество JS вопросов.