x não é uma função… o que você esperaria que o Object.create fizesse com um construtor?
Para esta pergunta, não estou esperando uma solução para resolver alguma coisa, mas gostaria de entender melhor as coisas.
Algumas citações das especificações:
Edição 5.1 (Ligação)
§15.2.3.5 Object.create (O [, Propriedades])
A função de criação cria um novo objeto com um protótipo especificado. Quando a função de criação é chamada, as seguintes etapas são executadas:
Se Type (O) não for Object ou Null, execute uma exceção TypeError.Seja obj o resultado da criação de um novo objeto como se fosse a expressão new Object () onde Object é o construtor interno padrão com esse nomeDefina a propriedade interna [[Prototype]] de obj para O.Se o argumento Properties estiver presente e não indefinido, adicione propriedades próprias a obj como se chamando a função interna padrão Object.defineProperties com os argumentos obj e Properties.Retornar obj.Edição 6 - rascunho (Ligação)
§19.1.3.2 Object.create (O [, Propriedades])
A função de criação cria um novo objeto com um protótipo especificado. Quando a função de criação é chamada, as seguintes etapas são executadas:
Se Type (O) não for Object ou Null, execute uma exceção TypeError.Seja obj o resultado da operação abstrata ObjectCreate com o argumento O.Se o argumento Properties estiver presente e não indefinido, então a. Retorna o resultado da operação abstrata ObjectDefineProperties (obj, Properties).Retornar obj.Se eu entendi corretamente, ambas as especificações permitem que o seguinte código seja executado:
function F() {
}
var x=Object.create(F);
// a minimal test
alert(x.prototype.constructor===F); // true
alert(x instanceof Function) // true
alert(typeof x) // 'object'
Parece que criou um objeto de um tipo deriva de(desculpe pela má terminologia ..) Function
como eu testei no FireFox, e assimx
énão invocável:
x(); // x is not a function
Eu estou pensando em por que isso não impede um construtor para ser usado comoO
ou apenas crie um construtor válido.
Então, eu estou querendo saber o que você espera que o Object.create faça com um construtor?