在对象原型中使用 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
功能。由于您没有对 addPerson
的 return
值执行任何操作,所以什么也没有发生 - 使用 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")
我有一个人 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
功能。由于您没有对 addPerson
的 return
值执行任何操作,所以什么也没有发生 - 使用 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")