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?