Więc uczę prototyp przy użyciu javascript i spróbował jakiś kod:niezdefiniowany wynik za pomocą prototypowego [JavaScript]
function Employee(name) { this.name= name; }
var m = new Employee("Bob");
var working= { isWorking: true };
Employee.prototype = working;
alert(m.isWorking);
Niestety, mam niezdefiniowanej wiadomość, zamiast prawdziwej wartości. Czy istnieje powód do tego wyniku?
Wykonałem kilka testów. Doszedłem do wniosku, że ponowne przypisanie obiektu prototypowego powoduje, że wszystkie utworzone wcześniej instancje klasy Employee nie mogą uzyskać dostępu do żadnych właściwości znalezionych w nowo przypisanym prototypie. Czy to jest dokładne?
Podczas tworzenia instancji odwołuje się do prototypu konstruktora w danym momencie. Jeśli później zastąpisz prototyp, istniejące instancje tego nie odzwierciedlą. Po utworzeniu instancji zazwyczaj oczekuje się rozszerzenia prototypu zamiast jego zastępowania. –
Odwołanie do instancji obiektu prototypowego jest ustawione na czas budowy (tj. Wiersz z 'nowym'). Zmiana całego obiektu właściwości 'Foo.prototype' nie zmieni tego odniesienia na instancji po. Jednak zmiany w obiekcie 'Foo.prototype' będą widoczne (ponieważ jest to ten sam obiekt), np. jeśli zamiast tego zrobiłeś 'Employee.prototype.isWorking = true;', zobaczyłbyś, czego się spodziewasz –
W celu dalszego czytania, jest to naprawdę dobry upadek prototypowego dziedziczenia: http://markdalgleish.com/2012/10/a -touch-of-class-inheritance-in-javascript/ – br3nt