2017-08-18 1 views
0

Gegeben:Wo sind die Instanzmethoden einer JavaScript-Klasse gespeichert?

var car = class Car{ 
    drive() {} 
    park(){} 
} 

Auto gegeben, wie kann ich mit welchen Methoden diese Klasse finden hat, dh "drive" und "Park"? ich sie auf

car.prototype

waren hätte gedacht, es ist wahr, dass

car.prototype.drive 

die Methode liefert und

car.prototype.hasOwnProperty("drive") => true 

aber

for(let prop_name in car.prototype){ 
    console.log(prop_name) 
} 

druckt nichts.

+0

'für in' ist seltsam. –

+0

Nicht sicher, welche Frage ist? – guest271314

+0

Sie haben Ihre Frage beantwortet: Sie sind auf dem Prototyp-Objekt gespeichert. Warum "for in" sie nicht aufzählt und wie man stattdessen auf sie zugreift, siehe das Duplikat. – Bergi

Antwort

0

Die Eigenschaft ist nicht aufzählbar (car.prototype.propertyIsEnumerable("drive") === false), daher wird sie nicht angezeigt. Siehe MDN.

Die für ... in Anweisung iteriert über die zählbaren Eigenschaften eines Objekt, in Originalauftrag

Ansonsten sind Sie richtig, ist die Funktion auf dem Prototyp.

Beachten Sie, dass dies nicht und Instanzmethode ist. Eine Instanzmethode existiert einmal pro Instanz, wie der Name bereits andeutet. Sie können Instanzmethoden, z. mit

class car { 
    constructor() { 
    this.instanceFunc =() => {}; 
    } 
} 

Hinweis hier, dass ausdrücklich new car().instanceFunc !== new car().instanceFunc