2017-12-18 14 views
0

Ich möchte eine Funktion zu einem Prototyp hinzufügen, um ein Feature zu einer Bibliothek hinzuzufügen. Wie kann ich auf den "diesen" Kontext des Prototyps zugreifen? Ich gebe Ihnen ein Beispiel zu erklären, was ich meine.Javascript: Erhalten Sie Zugriff auf Prototyp-Kontext beim Hinzufügen einer Funktion

// file a 
 

 
import * as utils from './utils' 
 
import Validation from './b' 
 

 
Validation.prototype.unique = function(url, params) { 
 
    if (!utils.isEmptyString(url) && !utils.isEmptyObject(params) { 
 
    // make api call for testing if unique 
 
    this._messages.push('Unique'); // <= I would like to access to "this" context of Validation in file b. 
 
    } 
 
    return this; 
 
} 
 

 

 

 
// file b 
 
import * as utils from './utils' 
 

 
export function Validation() { 
 
    this._messages = []; 
 
    this._value = undefined; 
 
    //... 
 
} 
 

 
Validation.prototype.required = function() { 
 
    if (!utils.isEmpty(this._value)) { 
 
    this._messages.push('Required); 
 
    } 
 
    return this; 
 
}

+3

das einfach funktioniert; Es spielt keine Rolle, in welcher Datei Ihre Funktion definiert ist. 'Dies 'wird nur von der Callsite übergeben. – SLaks

+0

Seitennotiz: Sie werden einige Leute sehen, die den Begriff "context" verwenden, um auf den Wert von 'this' zu verweisen, aber" context "(wie durch die Spezifikation definiert) und' this' haben sehr wenig miteinander zu tun . 'Das' ist nur' das'. :-) –

+1

Wenn 'Validation.prototype.unique'" richtig "heißt, nämlich die Methode einer' Validation'-Instanz, dann bezieht sich 'this' nur auf diese Instanz. * "Ich möchte auf" diesen "Kontext von Datei b zugreifen" * Ich glaube nicht, dass das ist, was Sie wollen;) –

Antwort

0

Ihre Nutzung von this in dem Verfahren wie das genau funktioniert. Die einzige Sache, die behoben werden muss, sind die nicht übereinstimmenden Import- und Exportanweisungen. Entweder verwenden

// file a 
import Validation from './b' 
… 

// file b 
export default function Validation() {…} 

oder

// file a 
import { Validation } from './b' 
… 

// file b 
export function Validation() {…} 
+0

Ja, Sie haben Recht, ich habe diesen Code im Browser geschrieben und ich habe einen Fehler gemacht. Die Flexibilität von Javascript ist nett. – devistar

Verwandte Themen