2014-02-02 3 views
1
function (type, a, b) { 
    var types = { 
    'add' : this.add(a,b), 
    'subtract' : this.subtract(a,b), 
    'multiply' : this.multiply(a,b) 
    }; 

    if(types[type]) 
    return types[type]; 
} 

Это может быть просто, но я не могу понять это. Я хочу, чтобы карта строк использовала ссылки (с заранее заданными параметрами), и если тип действителен, я хочу вызвать указанную функцию на карте.Javascript вызов функции ссылка

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

+1

Где 'this.add' определено? Что такое «это» должно быть здесь? –

+0

Выражение 'this.add (a, b)' оценивается * во время * построения объекта. Вероятно, вы захотите использовать закрытие (при использовании a/b) для любого операционного контракта, который вы имеете в виду. – user2864740

+2

Если вы хотите только ссылку на функцию, то удалите скобки и параметры. – CBroe

ответ

4

Похоже, что вы хотите:

function (type, a, b) { 
    var types = { 
    'add' : this.add, // assign reference 
    'subtract' : this.subtract, 
    'multiply' : this.multiply 
    }; 

    if(types[type]) 
    return types[type](a, b); // call function 
} 

Но вы могли бы также избежать создания объекта полностью:

function (type, a, b) { 
    if(['add', 'subtract', 'multiply'].indexOf(type) > -1) 
    return this[type](a, b); 
} 
Смежные вопросы