2017-01-21 1 views
2

Wenn ich für die Definition einer Javascript-Funktion, wie destroy() in IDEA aussehen IntelliJ durch Drücken der Taste F2:Javascript: Welche Funktion wird verwendet, wenn es mehrere Möglichkeiten gibt?

var myTable = $('#myList').dataTable({ 
    columns: listHeader, 
    data: listBody 
}); 

myTable.destroy(); 

kann ich mehrere Definitionen siehe:

destroy in Chart.PluginBase (chart.bundle.js, static) 
destroy in Chart.DatasetController (chart.bundle.js, static) 
destroy in DataTable.defaults (jquery.dataTables.js, static) 
destroy in u (angular-material.min.js, static) 
destroy in v (angular-material.min.js, static) 
destroy in r (angular-material.min.js, static) 

Wie kann ich erzwingen, dass der wollte Funktion wird verwendet?

+1

Es wird 'destructive' von' dataTable' aufrufen, da 'myTable' eine Referenz davon ist. –

+0

@ Sushanth-- und wie könnte ich programmgesteuert testen, dass myTable wirklich eine Referenz von DataTable ist? (In Java gäbe es so etwas wie: 'instanceOf') – user2145488

+0

Sie könnten den 'instanceof'-Operator verwenden, um zu überprüfen, ob das erzeugte Objekt vom erwarteten Konstruktor stammt. 'console.log (myTable instanceof dataTable)' –

Antwort

2

Nun, fragen Sie sich, von welchem ​​Typ Ihr ​​Objekt ist und Sie werden die Antwort haben. In Zeile 1 weisen Sie $ ('# myList'). DataTable() der Variablen zu, sodass Ihre Variable nun die Eigenschaften (einschließlich der Funktionseigenschaften) des dataTable-Objekts übernimmt. Wenn Sie nun myTable.destroy() ausführen, wird dies dataTable # destroy (das dritte in Ihrer Liste) verwenden.

Dies ist ein Beispiel für eine Funktion von prototypal inheritance.

EDIT: Weiter zu Ihrer Frage "Wie kann ich sicherstellen, aus welchem ​​Typ mein Objekt besteht" ... kurz gesagt ist es wirklich "du kannst nicht", nicht zuverlässig jedenfalls. Javascript ist einfach nicht eine statisch getippte Sprache .. und es ermöglicht einige schöne AWESOME Dinge. Aber, wenn Sie interessiert sind, schauen Sie in TypeScript

Verwandte Themen