2012-05-11 16 views
23

El siguiente código JavaScript es muy confuso para mí. ¿Alguien podría ayudarme a entender? ¿Por qué PersonY no tiene propiedad de prototipo?Diferencia de JavaScript entre la función y la nueva función

PersonX = function(){}; 
PersonY = new function(){}; 
alert(PersonX.prototype); 
alert(PersonY.prototype);  
​ 
+0

Use 'function', no' new function'. –

+0

Simplemente hazlo [nunca utilices la segunda construcción] (http://stackoverflow.com/q/10406552/1048572). – Bergi

Respuesta

33
PersonX = function(){}; 

Lugares en referencia a una función anónima en PersonX. PersonX apunta a una función.

PersonY = new function(){}; 

Lugares una referencia a un ejemplo de nueva construcción de una función de constructor anónimo en PersonY. PersonY apunta a un objeto.


En cuanto al prototipo, PersonY tiene uno. Sin embargo, dado que no había propiedades y métodos asociados al constructor before ni a la instanciación after, tiene un prototipo en blanco *.

Puede verificar el prototipo PersonY haciendo console.log(PersonY). Verá que tiene una propiedad prototipo (la veo como __proto__ en Chrome) que está "en blanco". Pero tiene 2 propiedades ocultas, constructor que es la función constructora que hizo el objeto, y otra __proto__ que lo conduce al siguiente "enlace de cadena" que sería el objeto Object.

* No está en blanco, ya que el prototipo es una cadena. Este prototipo de nivel puede estar en blanco, pero el próximo prototipo más alto puede tener, o en este caso, tiene propiedades y métodos.

Object prototype -> Constructor prototype -> Your Instance will have: 
- toString()  - blank     - toString() 
- hasOwnProperty()       - hasOwnProperty() 
- and more...        - and more... 
              - ...but nothing from Constructor 
+0

Sí. 'typeof new function() {} =>" object "' –

+0

Gracias, las respuestas y los comentarios de @Joseph fueron realmente útiles. – riship89

+0

¿Cuáles o dos sintaxis son mejores para el rendimiento? – rkmax

0

Eso es debido a que es en realidad un objeto instanciado en la memoria como una copia de la función; el prototipo realmente solo tiene significado en el contexto de una creación de la instancia, de modo que una vez que se crea, no hay una construcción lógica para lo que eso significa.

Cuestiones relacionadas