2012-07-01 21 views
7

Najwyraźniej korzystanie z właściwości __proto__ jest nadal głównym sposobem manipulowania łańcuchami prototypów, mimo że nie jest to zgodne ze standardami, a IE go nie obsługuje. Chociaż można również konstruować dziedziczenie za pomocą konstruktora new, wydaje się to niepotrzebną komplikacją w porównaniu z funkcją właściwości lub standardami zgodnymi z normą Object.getPrototypeOf.Dlaczego nie ma Object.setPrototypeOf (...) w standardzie ECMAScript?

Edit:

Jak wskazano w odpowiedzi, ta metoda nie istnieje NOW (standardu ES6). Zdawać sobie sprawę z ostrzeżeniem wydajności, choć: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/setPrototypeOf

+5

dobre wieści. wydaje się, że Object.setPrototypeOf() dostał się do ES6 http://webreflection.blogspot.pt/2013/05/objectsetprototypeofo-proto-is-in-s-es6.html – banzomaikaka

Odpowiedz

2

Brendan Eich mówi to here:

Object.setPrototypeOf nie zdarzy. Zapisywalny __proto__ jest gigantycznym bólem do implementacji (musi serializować do sprawdzania cyklu) i tworzy różnego rodzaju zagrożeń związanych z pomyłkami. Możesz myśleć, że chcesz go jako ostry instrument niskiego poziomu. JS nie jest tym językiem. Formy wyższego poziomu dla klas i miksów wydają się znacznie lepsze i nie wymagają takich ostrych krawędzi .

+0

Dziękuję za odpowiedź, choć muszę przyznać, że nie w pełni to rozumiem. Twoim pomysłem jest dodanie dziedziczenia nie-prototypowego w JavaScript? Moim zdaniem Object.setPrototypeOf po prostu tworzy prototyp obiektu odniesienia, więc nie rozumiem, jak to wymagałoby serializacji. – JussiR

+6

Wydaje się mylił :) Właśnie w w Chrome: https://code.google.com/p/v8/source/detail?r=18685 , a to eksperymentalny Firefox już: https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/setPrototypeOf – lucasarruda

+0

@Esailija Jaka jest Twoja opinia na ten temat w 2017 roku? Wydaje się, że stajesz się "poważny", jeśli chodzi o wydajność i optymalizację (w bibliotekach piszesz/piszesz), więc chciałbym wiedzieć, co myślisz. –