2017-06-02 2 views
0

Warum Aufruf von Person im Fensterbereich "[Object Object]" zurückgibt, während Aufruf im Objektbereich Object zurückgibt.Warum Aufruffunktion in Fensterbereich unterscheidet sich von Objektbereich

enter image description here

enter image description here

+0

Nun, einfach nicht tun 'Person.call (Fenster, ...) '. Das wird versuchen, 'window.name' zu ​​setzen. Und nein, das hat nichts mit Scopes zu tun - wenn Sie sich auf das Schlüsselwort 'this' beziehen, ist das der * Kontext * oder * Empfänger * des Calls. – Bergi

Antwort

0

window.name ist ein Getter/setter den Namen des Fensters einzustellen. Als solche muss es vom Typ string sein.

Try this:

Sie werden sehen, dass jetzt window.name wird auf "something,else"; Das ist das Ergebnis von Array.toString().

Genau das passiert hier. Wenn Sie eine objecttoString anrufen, erhalten Sie [object Object].

Ihr Programm funktioniert einwandfrei, wenn Sie nicht den vordefinierten window.name Getter/Setter verwenden.

function Person(first, last) { 
 
    this.something = { 
 
     first, 
 
     last 
 
    }; 
 
} 
 

 
f = {}; 
 

 
Person.call(f, "fsd", "fsd"); 
 
console.log(f.something); 
 

 
g = window; 
 
Person.call(g, "fsd", "fsd"); 
 
console.log(g.something);

Mehr auf Getter/Setter in javascript:

Setters: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/set

Getter: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/get

Verwandte Themen