Использование 'return' при создании объектов с 'new'
Сегодня я нашел кое-что очень странное: если вы создаете объекты с помощью функции конструктора иnew
ключевое слово, ноreturn
функция из конструктора, она ведет себя так:
this
в функции конструктора,this
ссылается на объект, который был правильно создан из конструктора. Это то, что вы ожидали получить отnew
.Вот пример:
function Constructor() {
var self = this;
this.name = 'instance';
return function() {
return self;
}
}
Так что, если вы создали его так:var instance = new Constructor()
В результате получится следующее:
typeof instance //returns "function"
typeof instance() //returns "object"
instance() //returns { name: 'instance' }
Итак, я думаю, у меня есть три вопроса:
Это законно и работает ли кросс-браузер? Это действительно потрясающе, и я думаю, что его можно использовать разными способами, но надежно ли это поведение?Что происходит в фоновом режиме, который вызывает это поведение?(может быть ответ 2, но ...) Новый объект (на который ссылается 'this') находится внутри нового экземпляра, так что он полностью автономен и правильно очищается сборщиком мусора?