2015-05-27 2 views
-1

Javascript объект, который имеет ключ как имя функции и значение как функцию.Звонок() использование в javascript

var fnObj = { getReport: [Function], getAccountDetail: [Function] } 

метод Invoke с помощью вызова

fnObj['getReport'].call(null,arg1,arg2); // since its dynamic method call so using call() 

или без вызова()

var a = fnObj['getReport'](arg1,arg2); 

динамической функции

getReport:function(arg1,arg2){ 
    //it will do some execution with arg1 and arg2 
    return {'some': 'result'}; 
} 

Какой способ вызова метода Invoke является правильным?

+0

Они оба правильные, но они разные. Это полностью зависит от того, что вы хотите. – Pointy

+1

fnObj.getReport (..) –

+0

Что вы подразумеваете под правильным? в обоих случаях вы выполняете функцию, другое - это 'this' внутри функции, используя' .call' и 'null',' this = window' и вызывающие его прямо 'this' is' fnObj'. – Luizgrs

ответ

4

Единственная разница между этими двумя методами - это значение this внутри функции.

Когда explicitly set it to null будет null (если вы не в строгом режиме, в этом случае это будет объект по умолчанию), when you don't будет значение fnObj.

Правильно (при условии, что это не так) будет зависеть от того, что делает функция с this (что мы не можем сказать, потому что вы не поделились этим кодом).


Re обновление:

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

+1

, это неправильно, когда вы используете 'null' в качестве первого параметра в' .call', ' this' будет глобальным объектом, для браузера это будет объект 'window' – Luizgrs

+0

@Luizgrs, почему бы вам не попробовать это с помощью простого теста? – Pointy

+0

обновил вопрос с помощью функции подробно – Elankeeran

0

Обычный способ был бы.

fnObj.getReport(arg1, arg2);

Если у вас есть конкретные потребности .

Смежные вопросы