2016-12-20 5 views
0

Я хотел бы использовать 'this' вместо имени объекта внутри IIFE.Использование этого внутри Javascript IIFE внутри объекта

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

Как это можно сделать?

+0

почему 'start' в IIFE? Это приведет к выполнению кода при определении этого объекта. 'start' будет настроен на то, что возвращает' socket.on' – Damon

+0

@Damon Нет, этого не будет, поскольку в функции нет оператора 'return'. 'start' будет установлен на' undefined'. – Barmar

+0

@Banzy Это не так, почему вы хотите установить свойство объекта неопределенным как побочный эффект? Образец здесь, как правило, должен определять функцию запуска объекта и вызывать эту функцию, когда это необходимо, в противном случае нет причин поместить этот немедленно исполняемый блок кода внутри объекта. – Damon

ответ

0

Вы не можете. Не говоря уже о том, что ваша функция не возвращает ничего, чтобы назначить ops.start.

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

ops.start(); 
-1

Вы можете создать новый объект и использовать его прототип для доступа «это»:

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

o.getobject; 
0

Вы можете использовать поглотитель и закрытие от контекста функции, если это необходимо. Getter автоматически вызывает функцию:

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

Теперь вы можете просто сослаться на ops.start