2016-12-20 8 views
0

Ich möchte 'dies' anstelle des Namens des Objekts innerhalb der IIFE verwenden.Verwenden Sie dies innerhalb eines Javascript IIFE innerhalb eines Objekts

var ops = { 
    start: (function(){ 
     socket.on('set', function(data) { 
     ops.getData();    
    }); 
    }()), 
    getData: function(){ 
     ... 
    } 
}; 

Wie kann es gemacht werden?

+0

warum 'eine IIFE Starten'? Dadurch wird der Code beim Definieren dieses Objekts ausgeführt. 'start' wird auf das gesetzt, was' socket.on' zurückgibt – Damon

+0

@Damon Nein, wird es nicht, da es keine 'return' Anweisung in der Funktion gibt. 'start' wird auf' undefined' gesetzt. – Barmar

+0

@Branzy Das ist neben dem Punkt, warum möchten Sie eine Objekteigenschaft als Nebeneffekt auf undefined setzen? Das Muster hier wäre normalerweise, eine Startfunktion für das Objekt zu definieren und diese Funktion bei Bedarf aufzurufen, andernfalls gibt es keinen Grund, den unmittelbar ausgeführten Codeblock innerhalb des Objekts zu platzieren. – Damon

Antwort

0

Sie können nicht. Ganz zu schweigen davon, dass Ihre Funktion nichts zu ops.start zurückgibt.

var ops = { 
    start: function(){ 
    var self = this; 
    socket.on('set', function(data) { 
     self.getData();    
    }); 
    } 
}; 

ops.start(); 
-1

Sie können ein neues Objekt erstellen und verwenden Sie es Prototyp ist für den Zugriff auf „this“: bei Bedarf

var o = Object.create(Object.prototype, { 
    data: { 
    value: 12 
    }, 
    getobject: { 
    get: function() { 
     return this.data; 
    } 
    } 
}); 

o.getobject; 
0

Sie Getter und Schließung auf Ihrer Funktion Kontext nutzen könnten. Getter ruft automatisch eine Funktion:

var ops = { 
    get start() { 
     return socket.on('set', function(data) { 
     ops.getData();    
    }); 
    }, 
    getData: function(){ 
    } 
}; 

Jetzt können Sie nur verweisen ops.start

Verwandte Themen