在对象原型中使用 arguments.length

Using arguments.length in Object-prototype

我有一个人 class,他有一个子 class 用户和管理员,用户将创建用户实例... 现在通过检查 arguments.length 来验证我的 addPerson() 属性将不起作用。

if 语句不会被执行,即使我可以记录 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 语句。 注意:我打算使用对象原型

您有一些语法错误 - 在您的 if 语句中,您在第二次比较时遗漏了 paraLength(应该是 || paraLength > 2)。您也没有关闭原来的 Person 功能。由于您没有对 addPersonreturn 值执行任何操作,所以什么也没有发生 - 使用 return console.log 到 return 日志到控制台:

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");

不太确定 User.addPerson() 应该做什么,但回答你的主要问题…

如果您想在 addPerson() 函数中捕获传递给 new User() 的太多(或太少)参数,您可以传递 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")