Sí, he visto esto preguntado y respondido antes. Pero esto es lo que todavía no entiendo:¿Otro más "cómo encontrar el nombre de clase/constructor de un objeto Javascript"?
Si creo una función constructora, y no anula las propiedades de la función prototype
, entonces tenemos la propiedad constructor
automática colgando fuera de la propiedad de la función prototype
. Eso es MyConstructor.prototype.constructor === MyConstructor
=> verdadero. Estupendo. Pero ahora, ¿qué sucede cuando anulo prototype
con mi propio objeto y no repare la propiedad constructor
? constructor
ahora no existe en prototype
, y si se hace referencia solo se encuentra en la cadena de prototipos, es decir MyConstructor.prototype.constructor === Object
=> verdadero. Multa. Entonces ...
¿Por qué es que en un depurador de Javascript (como Chrome), si anulo el prototipo de un constructor con mi propio objeto, y actualizo una instancia de ese constructor, y luego escribo esa variable de instancia en el comando línea, Chrome felizmente me dice el tipo? ¿Cómo lo sabe? Es decir. ¿Qué puedo hacer para descubrir lo mismo a través del código?
repro simple:
> function Foo() {}
undefined
> Foo.prototype.constructor === Foo
true
> Foo.prototype = {}
Object
> Foo.prototype.constructor === Foo
false
> f = new Foo()
Foo
> f
Foo
¿Es magia pura depurador?
La asociación todavía está allí en algún lugar, ya que 'f instanceof Foo' devuelve' true', pero no creo que esté expuesta al código de usuario. Supongo que lo convierte en pura depuración mágica. –
Este parece relacionado –
g13n
Firefox parece carecer de la magia del depurador ya que el f = new Foo() yf lines devuelven [objeto Object] que la respuesta vinculada explica más arriba – nvuono