Неиспользованные JavaScript аргументы - PullRequest
0 голосов
/ 03 мая 2020

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

function Dog(name) {
  this.name = name
}
Dog.prototype.bark = function() {
  console.log(this.name +" :Hello, human.");
}
var max = new Dog("Max", "Buddy")
max.bark();

Как вы можете видеть, два аргумента были переданы для создания нового объекта собаки, в то время как требовался только один (имя). Я знаю, что второй аргумент не используется, но где он хранится / есть ли какая-либо полезность для передачи дополнительного аргумента?

Заранее спасибо!

Ответы [ 4 ]

1 голос
/ 03 мая 2020

Их можно получить в объекте arguments :

arguments - это объект в виде массива, доступный внутри функций, который содержит значения аргументов, переданных этой функции .

function Dog(name) {
  console.log(arguments);
  this.name = name;
}
Dog.prototype.bark = function() {
  console.log(this.name +" :Hello, human.");
}
var max = new Dog("Max", "Buddy");
max.bark();

Современной альтернативой будет оператор распространения :

function Dog(...names) {
  console.log(names);
}
var max = new Dog("Max", "Buddy");
0 голосов
/ 03 мая 2020

Javascript - это динамический c язык. Та же функция может принимать динамические c аргументы. Существует несколько способов доступа ко всем передаваемым переменным 2 функции / конструктора.

  1. Использование аргументов .
  2. Использование vaargs или оператор покоя .
  3. Сочетание оператора отдыха и аргументов.

Зависит от того, как вы хотите использовать значения. Смотрите примеры ниже.

function DogArgs(name) {
  this.name = name;
  console.log(arguments); // array like structure [Arguments] { '0': 'Max', '1': 'Buddy' }
}

function DogRest(...names) {
  this.name = names[0];
  console.log(names); // Array [ 'Max', 'Buddy' ]
}
function DogPartialRest(name, ...others) {
  this.name = name;
  console.log(others); // Array [ 'Buddy' ]
}

var max1 = new DogArgs("Max", "Buddy");
var max2 = new DogRest("Max", "Buddy");
var max3 = new DogPartialRest("Max", "Buddy");

Пример 1. Использование аргументов

function sum() {
  const values = Array.from(arguments); // convertin array, since arguments is not array
  return values.reduce((sum, val) => (sum += val), 0);
}
console.log(sum(1, 2, 3)); // 6
console.log(sum(1, 2, 3, 4)); // 10

Пример 2. Использование оператора vaargs или rest.

function sum(...values) {
  return values.reduce((sum, val) => (sum += val), 0);
}
console.log(sum(1, 2, 3)); // 6
console.log(sum(1, 2, 3, 4)); // 10

Пример 3: сочетание оператора покоя и аргументов

function Person(name, age, ...rest) {
  this.name = name
  this.age = age
  this.salary = 0
  if(rest.length) {
    this.salary = rest[0]
    this.address = rest[1] || ''
  }
}
console.log(new Person("deepak", 30)) // Person { name: 'deepak', age: 30, salary: 0 }
console.log(new Person("deepak", 30, 2000)) // Person { name: 'deepak', age: 30, salary: 2000, address: '' }
0 голосов
/ 03 мая 2020

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

function Dog(name) {
  this.name = name
  // all the arguments are inside arguments property of function
  console.log(arguments);
}
Dog.prototype.bark = function() {
  console.log(this.name +" :Hello, human.");
}
var max = new Dog("Max", "Buddy")
max.bark();
0 голосов
/ 03 мая 2020

Они хранятся в arguments массиве:

function Dog(name) {
  this.name = name
  console.log(arguments)
}
Dog.prototype.bark = function() {
  console.log(this.name +" :Hello, human.");
}
var max = new Dog("Max", "Buddy", "Arm", {name: "Jacob"})
max.bark();
...