zpět k lekci

Rozdíl mezi voláními

důležitost: 5

Vytvořme nový objekt králík:

function Králík(jméno) {
  this.jméno = jméno;
}
Králík.prototype.řekniAhoj = function() {
  alert(this.jméno);
};

let králík = new Králík("Králík");

Učiní všechna tato volání totéž, nebo ne?

králík.řekniAhoj();
Králík.prototype.řekniAhoj();
Object.getPrototypeOf(králík).řekniAhoj();
králík.__proto__.řekniAhoj();

První volání má this == králík, v ostatních je this rovno Králík.prototype, protože je to ve skutečnosti objekt před tečkou.

Jedině první volání tedy zobrazí Králík, ostatní zobrazí undefined:

function Králík(jméno) {
  this.jméno = jméno;
}
Králík.prototype.řekniAhoj = function() {
  alert( this.jméno );
}

let králík = new Králík("Králík");

králík.řekniAhoj();                        // Králík
Králík.prototype.řekniAhoj();              // undefined
Object.getPrototypeOf(králík).řekniAhoj(); // undefined
králík.__proto__.řekniAhoj();              // undefined