2015-03-31 2 views
0

Я пытаюсь добавить свойства к объекту в JavaScript, и у меня возникли небольшие проблемы с закрытием «запомнить» контекст, в котором он был создан. Вот пример кода - на объекте есть другие свойства, но для цели этого вопроса я опустил их.Как мне закрыть мой JavaScript «запомнить» контекст, в котором он был создан, путем прокрутки свойств объекта?

dogs = { 
    fido: {}, 
    milo: {}, 
    ben: {} 
}; 

for (dog in dogs) { 
    qualities = dogs[dog]; 
    qualities.hungry = function(food) { 
    return (function(dog) { 
     return alert(dog + " is hungry for " + food); 
    })(dog); 
    }; 
} 

dogs.fido.hungry('biscuits'); // alerts "ben is hungry for biscuits" instead of "fido" 

ответ

0

У вас есть IEFE, испорченный. Он должен быть вокруг назначенной функции, иначе он не сможет установить контекст для закрытия. Когда вы вызываете только IEFE внутри метода, dog (аргумент) уже будет иметь значение false.

Использование

for (dog in dogs) { 
    dogs[dog].hungry = (function(dog) { 
    return function(food) { 
     return alert(dog + " is hungry for " + food); 
    }; 
    })(dog); 
}