2014-11-18 5 views
0

У меня есть объект функции JavaScript, определенный следующим образом:Назначение функции собственности объекта функции в

var minimal = (function() { 
    var handler = undefined; 
    var test = function() { 
     console.log(typeof handler); 
     if (typeof handler === 'function') { 
      handler(); 
     } 
    }; 
    var API = { 
     handler: handler, 
     test: test 
    }; 
    return API; 
}()); 

Я хочу, чтобы иметь возможность вводить функцию в объект по желанию.

Когда я устанавливаю функцию в этой собственности, функция не присваивается свойству объекта, он по-прежнему показывает, как undefined:

minimal.handler = function() { 
    console.log('handled'); 
}; 
minimal.test(); 

ли я просто идти о нем все не так? Есть ли лучший образец, который я должен использовать?


РЕШЕНИЕ

После прочтения комментариев и ответов, я понял, что проблема в том, что я перезаписать значение в API объекте: не установка переменного обработчика объекта. Это минимальный рабочий пример:

var minimal = (function() { 
    var handler = undefined; 
    var test = function() { 
     console.log(typeof handler); 
     if (typeof handler === 'function') { 
      handler(); 
     } 
    }; 
    var setHandler = function(func) { 
     handler = func; 
    }; 
    var API = { 
     setHandler: setHandler, 
     test: test 
    }; 
    return API; 
}()); 
minimal.setHandler(function() { 
    console.log('handled'); 
}); 
minimal.test(); 
+1

Не воспроизводя с этим кодом. – Scimonster

ответ

3

Это работает совершенно нормально:

myFuncObj = new function() { 
    this.changeHandler = undefined; 
}; 

myFuncObj.changeHandler = function(a, b) { 
    console.log({a:a,b:b}); 
} 

> myFuncObj 
[-] Object 
+ changeHandler Function 
[-] Object 
    + constructor Function 
    [-] Object 
> myFuncObj.changeHandler(1, 2) 
[-] Object 
+ a: 1 
+ b: 2 
[-] Object 

кроме того, что never should use new function() { … }. Просто сделайте

var myFuncObj = { 
    changeHandler: undefined; 
}; 
myFuncObj.changeHandler = function(a, b) { 
    console.log({a:a,b:b}); 
}; 

или

var myFuncObj = { 
    changeHandler: function(a, b) { 
     console.log({a:a,b:b}); 
    } 
}; 
Смежные вопросы