Wpis z mikrobloga

#javascript łańcuch prototype - dziwnie działa

mam funkcje konstruującą
function Base () {

}

Base.show () = function.....

Base.prototype.show = function .....

czy to normalne że gdy wywołuje

var obj = new Base();

obj.show() - to uruchamia mi się funkcja z "prototype" ?

wydawało mi się, że on najpierw patrzy w obiekcie, nie znajduje, wtedy patrzy w prototypie, potem idzie do kolejnego prototypu. czy się mylę?
  • 6
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

via Wykop Mobilny (Android)
  • 0
@Primek_1980: tutaj w kodzie masz przypisanie do Base.show więc dodałeś coś a la pole static w klasie - nie bierze to udziału w ogóle w łańcuchu prototypów. Więc nie, nie mylisz się, przy zrobieniu obj.show najpierw zostanie sprawdzony obj, potem obj[[Prototype]] , potem obj[[Prototype]][[Prototype]] I tak aż do końca łańcucha, tylko że właściwości konstruktora nie biorą w tym udziału bo konstruktor sam z siebie nie znajduje się w tym łańcuchu
  • Odpowiedz
via Wykop Mobilny (Android)
  • 0
@Primek_1980: ale z którego miejsca chciałbyś ja móc wywołać? Bo nie bardzo rozumiem co chcesz osiągnąć. W konstruktorze możesz przecież normalnie zrobić Base.show() (albo this.contructor.show() jeśli nie chcesz na sztywno mieć nazwy z jakiegoś powodu)
  • Odpowiedz
@Marmite: var obj = new Base()

obj.show(). Tutaj nie wywołuje mi się funkcja* tylko ta z prototypu (Base.prototype.show)

* Base.show = function...

Wydawalo mi się że taka funkcja powinna się wykonać jako pierwsza niż ta z prototypu.
  • Odpowiedz
via Wykop Mobilny (Android)
  • 0
@Primek_1980: no właśnie funkcja Base.show nigdy ci się nie wywoła. Pomyśl o niej jak o odpowiedniku metody statycznej w klasie. Properties które są bezpośrednio na Base nie biorą udziału w łańcuchu prototypów, jedynie te które są w Base.prototype
  • Odpowiedz