x nie jest funkcją… czego można oczekiwać od Object.create w przypadku konstruktora

Na to pytanie nie oczekuję rozwiązania, które mogłoby coś rozwiązać, ale chciałbym lepiej zrozumieć rzeczy.

Niektóre cytaty ze specyfikacji:

Edycja 5.1 (Połączyć)

§15.2.3.5 Utwórz obiekt (O [, Właściwości])

Funkcja create tworzy nowy obiekt z określonym prototypem. Po wywołaniu funkcji tworzenia wykonywane są następujące kroki:

Jeśli Type (O) nie jest Object lub Null, rzuć wyjątek TypeError.Niech obj będzie wynikiem utworzenia nowego obiektu, jak gdyby wyrażeniem nowy Object () gdzie Object jest standardowym wbudowanym konstruktorem o tej nazwieUstaw właściwość wewnętrzną [[Prototype]] obiektu obj na O.Jeśli argument Właściwości jest obecny i nie jest niezdefiniowany, dodaj własne właściwości do obj, jak gdyby wywołując standardową wbudowaną funkcję Object.defineProperties z argumentami obj i Properties.Zwróć obj.

Wydanie 6 - wersja robocza (Połączyć)

§19.1.3.2 Utwórz obiekt (O [, Właściwości])

Funkcja create tworzy nowy obiekt z określonym prototypem. Po wywołaniu funkcji tworzenia wykonywane są następujące kroki:

Jeśli Type (O) nie jest Object lub Null, rzuć wyjątek TypeError.Niech obj będzie wynikiem operacji abstrakcyjnej ObjectCreate za pomocą argumentu O.Jeśli argument Właściwości jest obecny i nie jest niezdefiniowany, a. Zwraca wynik operacji abstrakcyjnej ObjectDefineProperties (obj, Właściwości).Zwróć obj.

Jeśli dobrze zrozumiałem, obie specyfikacje umożliwiają wykonanie następującego kodu:

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'

Wygląda na to, że obiekt, z którego został utworzony, pochodzi z typu(przepraszam za słabą terminologię ..) Function jak testowałem w FireFox, i tak dalejx jestnieodwołalny:

x(); // x is not a function 

Zastanawiam się, dlaczego nie zabrania użycia konstruktora jakoO lub po prostu utwórz prawidłowego konstruktora.

Zastanawiam się więc, czego można oczekiwać od Object.create z konstruktorem?

questionAnswers(2)

yourAnswerToTheQuestion