#function #javascript-objects #javascript
#функция #javascript-объекты #javascript
Вопрос:
Я недавно возился с jQuery на своем веб-сайте, и у меня довольно ограниченные знания Javascript. Мне начинает нравиться способность jQuery передавать переменные в функцию jQuery внутри фигурных скобок, например:
$(somediv).animate({thisisone: 1, thisistwo: 2}, thisisavar);
Мне было интересно, как я могу написать функцию Javascript, в которую я могу передавать элементы внутри фигурных скобок? Я знаю, что вы можете писать такие функции, как это:
function someName(var1, var2, var3...) {
}
но это не поддерживает фигурные скобки? Я также знаю, что вы не можете добавлять аргументы и делать это:
function accident() {
for( var i = 0; i < arguments.length; i ) {
alert("This accident was caused by " arguments[i]);
}
}
accident("me","a car","alcohol","a tree that had no right to be in the path of my driving");
но я также хочу передавать внешние переменные вместо целой строки строк, если это имеет смысл?
В принципе, мне нужна функция, в которую я могу передавать переменные, например:
function myFunction(neededcodehere){
//Some code here...
}
myFunction (var1, {"Option 1", "Option 2", "Option 3"}, anothervar);
Комментарии:
1. FWIW
{"Option 1", "Option 2", "Option 3"}
иvar 1
недопустимый JavaScript.2. Призрак, я просто хотел бы отметить, что если вы передаете предварительно объявленные переменные, ваша функция уже сможет получить к ним доступ без какого-либо специального синтаксиса (если они не вложены в какую-либо другую функцию).
3. Эй, Марлин, они не будут предварительно объявлены, я написал это неправильно, это будет выглядеть примерно так
myFunction("Title", {"Option 1" : "option1name", "Option 2" : "option2name"}, true)
Ответ №1:
«Фигурные скобки» делают объект литералом, то есть они создают объект. Это один аргумент.
Пример:
function someFunc(arg) {
alert(arg.foo);
alert(arg.bar);
}
someFunc({foo: "This", bar: "works!"});
объект также может быть создан заранее:
var someObject = {
foo: "This",
bar: "works!"
};
someFunc(someObject);
Я рекомендую прочитать руководство по MDN JavaScript — Работа с объектами.
Комментарии:
1. Знаете ли вы, как установить значение по умолчанию, если, скажем, значение foo не было передано? Такой, который
someFunc({bar: "works!"});
по-прежнему генерирует предупреждения с надписью «Это» и «работает!»2. @Normajean Вы создаете объект по умолчанию с теми же свойствами и объединяетесь с объектом arguments . Смотрите мой ответ ниже, поскольку форматирование в комментариях плохое
3. Вот обновленный URL-адрес руководства MDN JS: developer.mozilla.org/en-US/docs/Web/JavaScript/Guide
4. Привет @Felix. что, если у этого объекта есть функция? он вызывается немедленно. как я могу это предотвратить?
5. @Arash: Вы должны опубликовать актуальный вопрос. Здесь мне не хватает большого контекста, но создание объекта, который содержит функцию в качестве свойства, не вызывает указанную функцию автоматически. Если это происходит в вашем случае, то ваш код (намеренно или непреднамеренно) настроен для этого.
Ответ №2:
function myFunction(arg) {
alert(arg.var1 ' ' arg.var2 ' ' arg.var3);
}
myFunction ({ var1: "Option 1", var2: "Option 2", var3: "Option 3" });
Комментарии:
1. Правильно. … Я использовал JSON.parse() для моего объектного литерала. … он уже был проанализирован! …дох!
Ответ №3:
Отвечая на вопрос normajeans о настройке значения по умолчанию. Создайте объект по умолчанию с теми же свойствами и объедините его с объектом arguments
При использовании ES6:
function yourFunction(args){
let defaults = {opt1: true, opt2: 'something'};
let params = {...defaults, ...args}; // right-most object overwrites
console.log(params.opt1);
}
Старые браузеры, использующие Object.assign(цель, источник):
function yourFunction(args){
var defaults = {opt1: true, opt2: 'something'};
var params = Object.assign(defaults, args) // args overwrites as it is source
console.log(params.opt1);
}
Ответ №4:
когда вы передаете объект в фигурных скобках в качестве аргумента функции с одним параметром, вы присваиваете этот объект переменной, которая в данном случае является параметром
Ответ №5:
Мои центы.
function readable(args) {
const {opt1, opt2, opt3} = args
console.log(opt1 opt2 opt3)
// => "My favorite things"
}
readable({
opt1: "My f"
, opt2: "avori"
, opt3: "te things"
})