2012-05-06 2 views
3

Я помню, как натолкнулся на решение этой проблемы. Для этого типа аргумента есть специальный термин, если я не ошибаюсь. Но я просто не могу точно запомнить, что это такое. Я пытаюсь найти его в Интернете, но безрезультатно. Итак, вот оно:Javascript: Передача специального аргумента

Я хочу передать аргумент, который состоит из функции. Что мне делать?

function meow(cat){ 
    var z = $("#nyan").position().cat; 
    alert(z); 
} 

meow(left); 

или

function meow(cat){ 
    var z = $("#nyan").cat(); 
    alert(z); 
} 

meow(height); 

ответ

0

Это не совсем функция; он больше похож на то, что вы хотите имя свойства.

Я просто собираюсь предложить вам несколько советов и посмотреть, какой из них вам больше всего нравится.

function meow(cat) { 
    var z = $("#nyan").position()[cat]; 
    alert(z); 
} 

meow("left"); 

... или ...

function meow(cat) { 
    var z = $("#nyan")[cat](); 
    alert(z); 
} 

meow("height"); 

... или, на самом деле с помощью функции:

function meow(getter) { 
    var z = getter($("#nyan")); 
    alert(z); 
} 

meow(function(nyan) { return nyan.position().left }); 
meow(function(nyan) { return nyan.position().top }); 
// etc. 

Редактировать: самое главное, что a.b является эквивалентно a["b"] -номер цитаты в последнем.

Так что, если вы хотите a.x если width является trueилиa.y если width является false, например:

var result = a[width ? "x" : "y"]; 
0

Вы можете использовать call для вызова функции, которая была передана в качестве аргумента:

function meow(cat) { 
    var z = cat.call($("#nyan")); 
    alert(z); 
} 

meow($.fn.height); 
+0

В порядке пояснения: 'func.call', где функция' func' является функцией, принимает в качестве первого аргумента значение 'this' на время' func'. – Ashe

0

Данные решения будут работать, но они не будут работать, если вы хотите, чтобы функция t o принимать как свойство/атрибут, так и функции.

Попробуйте это:

function meow(cat){ 
    var z = typeof cat == 'function' ? $("#nyan").[z]() : $("#nyan")[z]; 
    alert(z); 
} 

meow(left); 

Изменить это в отелях.

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