2016-06-23 3 views
1

Ich habe den folgenden Code für ein Drag-Ereignis:Zugang ‚this‘ in einer Funktion auf Drag-Ereignisse

BusinessProductFigure.prototype = new Figure(); 
BusinessProductFigure.prototype.constructor = BusinessProductFigure; 
BusinessProductFigure.prototype.addTo = function(c, x0, y0, id) { 
console.log("this=",this); 
var n = d3.select(this); 
var wasMoved = false; 
var dragger = d3.behavior.drag() 
    .origin(function(d){return d;}) 
    .on("drag", this.move) 
    .on("dragend", dropHandler) 

Die Funktion this.move in dem obigen Code ausführt und führt es Funktion bezeichnet wird. Ich möchte jedoch eine Funktion hinzufügen, die beim Drag-Ereignis aufgerufen wird. Ich habe folgendes versucht:

BusinessProductFigure.prototype.addTo = function(c, x0, y0, id) { 
console.log("this=",this); 
var n = d3.select(this); 
var wasMoved = false; 
var dragger = d3.behavior.drag() 
    .origin(function(d){return d;}) 
    .on("drag", function(){wasMoved=true; this.move}) 
    .on("dragend", dropHandler) 

Aber der oben genannte Code ruft nicht die Move-Funktion auf. Wie kann ich auf diese Eigenschaft innerhalb der Funktion zugreifen?

+0

Ich verstehe den Grund nicht, um die Frage abzustimmen. Wenn jemand Anfänger ist und keinen Code herausfinden kann, ist es falsch zu fragen? Ist die Community nicht hier, um Entwickler zu unterstützen und neuen Programmierern zu helfen, zu lernen und zu verbessern? – Arihant

Antwort

2

Sie können relevante Kontext binden bind() verwenden, und verwenden parenthensis die Methode aufzurufen:

.on("drag", function(){wasMoved=true; this.move()}.bind(this))

1

Eine andere Lösung, weil es 2016 bereits arrow function verwenden lexikalischen Kontext zu erhalten:

.on("drag",() => { 
    wasMoved = true; 
    this.move() 
}) 
Verwandte Themen