Различие JavaScript между функцией и новой функцией

Следующий код JavaScript очень смущает меня. Может ли кто-нибудь помочь мне понять. Почему PersonY не имеет свойства прототипа.

<code>PersonX = function(){};
PersonY = new function(){};
alert(PersonX.prototype);
alert(PersonY.prototype);    
​
</code>
 Bergi08 окт. 2014 г., 19:24
Просто делатьnever ever use the second construct.
 Matt Ball11 мая 2012 г., 21:08
использованиеfunctionнеnew function.

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

Решение Вопроса
PersonX = function(){};

Помещает ссылку на анонимную функцию вPersonX. PersonX указывает на функцию.

PersonY = new function(){};

Помещает ссылку на недавно созданный экземпляр функции анонимного конструктора вPersonY. PersonY указывает на объект.

Что касается прототипа,PersonY есть один. Тем не менее, поскольку не было свойств и методов, прикрепленных к конструкторудо нипосле экземпляр, у него естьblank prototype*.

Вы можете проверитьPersonYпрототип, выполняяconsole.log(PersonY), Вы увидите, что у него есть свойство прототипа (я вижу это как__proto__ в Chrome), который является "пустым". Но у него есть 2 скрытых свойства,constructor которая является функцией конструктора, которая сделала объект, и другой__proto__ что приводит вас к следующей «цепной ссылке» который был быObject объект.

*Not really blank since prototype is a chain. This prototype level may be blank, but the next higher prototype may have, or in this case, does have properties and methods.

Object prototype -> Constructor prototype -> Your Instance will have:
- toString()        - blank                  - toString()
- hasOwnProperty()                           - hasOwnProperty()
- and more...                                - and more...
                                             - ...but nothing from Constructor
 09 июн. 2013 г., 04:45
@rkmax Вы не можете их сравнивать. Оба делают разные вещи.
 09 июн. 2013 г., 01:16
какой или два синтаксиса лучше для производительности?
 riship8911 мая 2012 г., 21:17
Спасибо, ответы @Joseph и комментарии были действительно полезны.
 11 мая 2012 г., 21:10
Да.typeof new function(){} => "object"

Это потому, что это фактически объект, созданный в памяти как копия функции; на самом деле прототип имеет значение только в контексте создания экземпляра, поэтому после его создания логическая конструкция для определения этого значения отсутствует.

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