2017-05-04 2 views
0

in JavaScript durch JavaScript The Definitive Guide zu lernen, sah ichSind Methoden eine Teilmenge von Eigenschaften?

Wenn der Wert einer Eigenschaft eine Funktion ist, nennen wir es eine Methode.

Q1. Sind Methoden eine Teilmenge von Eigenschaften?


Q2. Wenn eine Variable wie string und number (NOT Object) deklariert wird, erbt sie die Eigenschaft von String oder Number Object?

+1

Eine Eigenschaft ist eine Eigenschaft. Der Wert einer Eigenschaft kann wie der Wert einer Variablen eine Referenz auf ein Objekt, eine Zahl, eine Zeichenfolge, "null" oder eine Referenz auf eine Funktion (Sonderfall der Referenz auf ein Objekt) oder verschiedene andere sein Dinge. – Pointy

Antwort

-2

Q1. Sind Methoden eine Teilmenge von Eigenschaften?

Ja, in JavaScript ist jede Objektvariable eine Eigenschaft. Wenn es Wert ist Funktion, wird es eine Methode genannt. Im Allgemeinen werden Objektvariablen Felder oder Attribute genannt, während Eigenschaften wirken wie virtuelle Variablen aus erhalten und gesetzt Objektmethoden für den Zugriff auf und einige private Feld zu ändern. In Javascript können wir die Objektvariable auf dieses Verhalten erweitern, siehe Definieren von Gettern und Setter here.

Q2. Wenn eine Variable wie string oder number (NOT Object) deklariert wird, erbt sie die Eigenschaft von String oder Number Object?

No. Deklaration einer Variablen definiert nur Umfang und standardmäßig sein Typ ist undefined.

function question() { 
    var answer; // answer is undefined type with question scope and undefined value 
    answer = 42; // now answer is number type 
} 

Nummer und Stringliterale sind primitive Werte, hat sie keine Mitglieder nicht enthalten. Wenn Sie jedoch auf ein Element des entsprechenden Objekttyps (Number bzw. String) zugreifen, wird ein temporäres Objekt hinter dem Vorhang erstellt, auf das Element wird zugegriffen und dann verschwindet das temporäre Objekt.

var b = "hello"; // b does not contain indexOf() method 
b.indexOf("lo"); // indexOf() is invoked on temporary created object 
"hello".indexOf("lo"); // same effect 
var c = new String("hello"); // c contains indexOf() method, greater footprint than b 
c.indexOf("lo"); // temporary object is not created, more effective 

console.log(b, typeof b); 
// "hello" 
// string 
console.log(c, typeof c); 
// String {0: "h", 1: "e", 2: "l", 3: "l", 4: "o", length: 5, [[PrimitiveValue]]: "hello"} 
// object 
// also contains __proto__ - prototype of the String object 
console.log(b==c); 
// true (comparison operator is overloaded) 
console.log(b===c); 
// false (the type does not match) 

Wie Sie sehen können, wenn Sie keine Mitglieder benötigen, ist es effektiver, einen primitiven Wert zu erstellen. Wenn Sie jedoch Member verwenden, ist es effektiver, ein Objekt zu erstellen, und in diesem Fall werden die Eigenschaften vererbt.

+0

Was sind "Eigenschaften Mitglieder"? Noch nie davon gehört. – Bergi

+0

@Bergi sie sind Schlüssel von [Eigenschaftendeskriptor] (https://developer.mozilla.org/cs/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty) welches ist objekt, also sind die Schlüssel Mitglieder. Zumindest ist das mein Verständnis. Wenn es eine missbrauchte Terminologie gibt, bitte erleuchten Sie mich, um diese Antwort zu verbessern. –

+0

Die richtige Terminologie ist, dass sie * Attribute * der Eigenschaft sind. Und nur der Property-Deskriptor * ist ein Objekt, eine Eigenschaft selbst nicht. Aber ich sehe nicht, was das mit der Eigenschaft-gegen-Methode-Frage zu tun hat. – Bergi

1

Q1. Sind Methoden eine Teilmenge von Eigenschaften?

Ja. Wenn der Wert einer Eigenschaft eine Funktion (oder streng genommen eine Referenz auf eine Funktion) ist, wird sie normalerweise als Methode des Objekts bezeichnet. Es folgert auch, dass das Verfahren sollte seine diese auf das Objekt gesetzt aufgerufen werden:

var global = this; 
 
var obj = { 
 
    fn: function() { 
 
    console.log('this is ' + (this == obj ? 'obj' : 
 
     this == global? 'global' : this) 
 
    ); 
 
    } 
 
}; 
 

 
// Call as method of obj 
 
obj.fn(); 
 

 
// Call as plain function 
 
var f = obj.fn; 
 
f();

Q2. Wenn eine Variable wie string und number (NOT Object) deklariert wird, erbt sie die Eigenschaft von String, Number Object?

Variablen haben keinen Typ, ihre Werte tun dies. Die Deklaration einer Variablen erstellt sie einfach als Referenz im relevanten Kontext (beachten Sie, dass sich anders verhält als let und const).

Es könnte scheinen, dass eine Variable hat einen Typ, aber es ist der Wert, der den Typ hat:

var a; 
 
console.log('a is : ' + typeof a); // undefined 
 
a = "A"; 
 
console.log('a is : ' + typeof a); // string 
 
a = 5; 
 
console.log('a is : ' + typeof a); // number

Verwandte Themen