Tengo el siguiente código:
var obj2 = new Object(); console.log(Object.isExtensible(obj2)); //returns 'true' console.log(obj2.constructor.isExtensible()); //returns 'false'¿Alguien podría explicar por qué la primera impresión de la consola devuelve booleano 'verdadero' y el segundo 'falso' y qué diferencia hace si isExtensible() se llama de cualquier manera?
El .constructor de una instancia se refiere a la clase/función que instancia una instancia. Ya que estás haciendo
var obj2 = new Object(); esto significa que obj2.constructor es lo mismo que Object.
Asi que
obj2.constructor.isExtensible() está llamando a Object.isExtensible , pero sin un argumento. isExtensible requiere un argumento. Si le pasas el obj2 , hará lo que esperas:
var obj2 = new Object(); console.log(Object.isExtensible(obj2)); //returns 'true' console.log(obj2.constructor.isExtensible(obj2)); console.log(obj2.constructor === Object); Pero eso sigue siendo confuso. Recomiendo nunca usar obj2.constructor ; solo use Object en su lugar, tendrá más sentido.
Por lo general, probablemente solo querrá usar la propiedad .constructor cuando aún no tenga una referencia a la clase; de lo contrario, es más fácil hacer referencia a la clase.