Как получить имена/значения параметра функции динамично?

Если ваше изображение - pool.jpg. Поместите его в /src/assets/img/pool.jpg

Он должен находиться в этом каталоге (assets), поскольку это ваш источник, из которого все строится.

Затем прекратите свою команду ионной подачи (Ctrl-C) или что вы используете.

Затем удалите ВСЕ в каталоге www (все равно будет восстановлено).

Затем перезапустите сервер, снова запустив «ionic serve».

Это перестроит каталог с изображениями. Вы можете ссылаться на изображение как background-image: url ('../ assets / img / pool.jpg'); в вашем коде.

Я использую ionic 3, и жаль, что он не фиксирует изменения в каталоге ресурсов. ИОНИК должен на это посмотреть.

282
задан Sebastian Simon 30 May 2017 в 12:17
поделиться

5 ответов

I've tried doing this before, but never found a praticial way to get it done. I ended up passing in an object instead and then looping through it.

//define like
function test(args) {
    for(var item in args) {
        alert(item);
        alert(args[item]);
    }
}

//then used like
test({
    name:"Joe",
    age:40,
    admin:bool
});
6
ответ дан 23 November 2019 в 01:56
поделиться

I don't know how to get a list of the parameters but you can do this to get how many it expects.

alert(doSomething.length);
2
ответ дан 23 November 2019 в 01:56
поделиться

Вы можете получить доступ к значениям аргументов, переданных функции, используя свойство "arguments".

    function doSomething()
    {
        var args = doSomething.arguments;
        var numArgs = args.length;
        for(var i = 0 ; i < numArgs ; i++)
        {
            console.log("arg " + (i+1) + " = " + args[i]);  
                    //console.log works with firefox + firebug
                    // you can use an alert to check in other browsers
        }
    }

    doSomething(1, '2', {A:2}, [1,2,3]);    
0
ответ дан 23 November 2019 в 01:56
поделиться

I не знаю, подходит ли это решение для вашей проблемы, но оно позволяет вам переопределить любую функцию, которую вы хотите, без необходимости изменять код, который ее использует. Существующие вызовы будут использовать позиционированные параметры, в то время как реализация функции может использовать «именованные параметры» (один хэш-параметр).

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

<!DOCTYPE html>

<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
var withNamedParams = function(params, lambda) {
    return function() {
        var named = {};
        var max   = arguments.length;

        for (var i=0; i<max; i++) {
            named[params[i]] = arguments[i];
        }

        return lambda(named);
    };
};

var foo = withNamedParams(["a", "b", "c"], function(params) {
    for (var param in params) {
        alert(param + ": " + params[param]);
    }
});

foo(1, 2, 3);
</script>
</head>
<body>

</body>
</html>

Надеюсь, это поможет.

Я знаю, подходит ли это решение для вашей проблемы, но оно позволяет вам переопределить любую функцию, которую вы хотите, без необходимости изменять код, который ее использует. Существующие вызовы будут использовать позиционированные параметры, в то время как реализация функции может использовать «именованные параметры» (один хэш-параметр).

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

<!DOCTYPE html>

<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
var withNamedParams = function(params, lambda) {
    return function() {
        var named = {};
        var max   = arguments.length;

        for (var i=0; i<max; i++) {
            named[params[i]] = arguments[i];
        }

        return lambda(named);
    };
};

var foo = withNamedParams(["a", "b", "c"], function(params) {
    for (var param in params) {
        alert(param + ": " + params[param]);
    }
});

foo(1, 2, 3);
</script>
</head>
<body>

</body>
</html>

Надеюсь, это поможет.

Я знаю, подходит ли это решение для вашей проблемы, но оно позволяет вам переопределить любую функцию, которую вы хотите, без необходимости изменять код, который ее использует. Существующие вызовы будут использовать позиционированные параметры, в то время как реализация функции может использовать «именованные параметры» (один хэш-параметр).

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

<!DOCTYPE html>

<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
var withNamedParams = function(params, lambda) {
    return function() {
        var named = {};
        var max   = arguments.length;

        for (var i=0; i<max; i++) {
            named[params[i]] = arguments[i];
        }

        return lambda(named);
    };
};

var foo = withNamedParams(["a", "b", "c"], function(params) {
    for (var param in params) {
        alert(param + ": " + params[param]);
    }
});

foo(1, 2, 3);
</script>
</head>
<body>

</body>
</html>

Надеюсь, это поможет.

4
ответ дан 23 November 2019 в 01:56
поделиться

Вот один способ:

// Utility function to extract arg name-value pairs
function getArgs(args) {
    var argsObj = {};

    var argList = /\(([^)]*)/.exec(args.callee)[1];
    var argCnt = 0;
    var tokens;
    var argRe = /\s*([^,]+)/g;

    while (tokens = argRe.exec(argList)) {
        argsObj[tokens[1]] = args[argCnt++];
    }

    return argsObj;
}

// Test subject
function add(number1, number2) {
    var args = getArgs(arguments);
    console.log(args); // ({ number1: 3, number2: 4 })
}

// Invoke test subject
add(3, 4);

Примечание. Это работает только в браузерах, поддерживающих arguments.callee .

0
ответ дан 23 November 2019 в 01:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: