Использование arguments.length в объекте-прототипе - PullRequest
0 голосов
/ 14 апреля 2019

У меня есть класс person, у которого есть подкласс User и Admin, и пользователь будет создавать пользовательские экземпляры ... Теперь проверка моих свойств addPerson () путем проверки arguments.length не будет работать.

если оператор не будет выполнен, хотя я могу записать arguments.length

var Person = function(name, email) {
  this.name = name;
  this.email = email;

  this.addPerson = function(name, email) {
    var paraLength = arguments.length;
    console.log(paraLength) //logs 2
    if(paraLength < 2 || > 2) {
      return "Input must be just name and email"; //does nothing
    }else{
    //do other things
    }
}

const User = function(name, email) {
  Person.call(this, name, email);
  this.addPerson(name, email); //adding user on execution
};

User.prototype = Object.create(Person.prototype);

//Pointing User constructor to itself so it can override properties
User.prototype.constructor = User;
var user1 = new User("user1", "email@gmail", "this error", "not just ignored")

Я хотел бы завершить оператор return, если переданный параметр меньше или больше двух.Примечание: я намерен использовать прототип объекта

Ответы [ 2 ]

0 голосов
/ 14 апреля 2019

Не совсем уверен, что User.addPerson() должен делать, но чтобы ответить на ваш главный вопрос ...

Если вы хотите перехватить слишком много (или слишком мало) параметров, переданных new User() в addPerson() функция, вы можете передать arguments, а не только имя и адрес электронной почты.Вы можете сделать это с помощью:

this.addPerson.apply(this, arguments);

, чтобы addPerson увидел все аргументы, переданные в User()

var Person = function(name, email) {
  this.name = name;
  this.email = email;

  this.addPerson = function(name, email) {
    var paraLength = arguments.length;
    console.log(paraLength) //logs 2
    if(paraLength < 2 || paraLength > 2) {
      console.log( "Input must be just name and email"); //does nothing
    }else{
    //do other things
    }
}
}

const User = function(name, email) {
  Person.call(this, name, email);
  this.addPerson.apply(this, arguments); //adding user on execution
};

User.prototype = Object.create(Person.prototype);

var user1 = new User("user1", "email@gmail", "this error", "not just ignored")
0 голосов
/ 14 апреля 2019

У вас есть несколько синтаксических ошибок - в вашем операторе if вы пропускаете paraLength во втором сравнении (должно быть || paraLength > 2).Вы также не закрыли свою первоначальную функцию Person.И поскольку вы ничего не делаете со значением return addPerson, ничего не происходит - используйте return console.log для возврата и log на консоль:

const Person = function(name, email) {
  this.name = name;
  this.email = email;

  this.addPerson = function(name, email) {
    let paraLength = arguments.length;
    console.log(paraLength) //logs 2
    if (paraLength < 2 || paraLength > 2) {
      return console.log("Input must be just name and email"); //does nothing
    } else {
      console.log("2 arguments!");
    }
  }
}

const User = function(name, email) {
  Person.call(this, name, email);
  this.addPerson(name, email); //adding user on execution
};

User.prototype = Object.create(Person.prototype);
User.prototype.constructor = User;

//All tests are below this line

let user1 = new User("user1", "email@gmail", "this error", "not just ignored");
user1.addPerson("one", "two", "three");
user1.addPerson("one");
...