Использование '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') находится внутри нового экземпляра, так что он полностью автономен и правильно очищается сборщиком мусора?

Ответы на вопрос(3)

Ваш ответ на вопрос