如何在Javascript中根据所述对象内的特定条件创建对象。例如:
function User(email) {
this.email = email;
this.checkValid = function () {
// check email if not valid delete the object or return nothing
}
this.checkValid()
}
var user1 = new User("bob123@aol.com")
答案 0 :(得分:2)
如果无效则删除对象
唐'吨。更好的是,在尝试创建用户之前测试电子邮件地址是否有效。
或不返回任何内容
你真的不可能。除了抛出异常之外,从构造函数中返回任何内容实际上都是不可能的。
使用额外的工厂功能:
function isValidEmail(str) {
// http://davidcel.is/blog/2012/09/06/stop-validating-email-addresses-with-regex/
return /.+@.+\..+/.test(str);
}
function User(email) {
// possible, but better don't do this:
// if (!isValidEmail(email)) throw new Error("Tried to create User with invalid email")
this.email = email;
}
User.prototype.checkValid = function () {
return isValidEmail(this.email);
};
User.create = function(email) {
if (isValidEmail(email))
return new User(email);
else
return null;
};
var user1 = User.create("bob123@aol.com")
if (user1)
this.checkValid() // true
答案 1 :(得分:1)
function createUser(username, email)
{
if (email.match(/^[a-z0-9!#$%&\'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&\'*+\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/ig))
{
window[username] = new User(email);
return true;
}
else
{
return null;
}
}
function User(email)
{
this.email = email;
}
if (createUser("user1", "bob123@aol.com"))
{
document.write("User 1: " + user1.email + "<br />");
}
if (createUser("user2", "bob123aol.com"))
{
document.write("User 2: " + user2.email);
}
document.write(window['user1'] + "<br />");
document.write(window['user2']);
&#13;
这将检查用户是否有有效的电子邮件。如果是这样,则创建一个由User
构造的全局变量,如果不是,则返回任何内容。您当然可以用任何其他对象替换窗口(全局范围)对象。
答案 2 :(得分:0)
function User(email) {
this.email = email;
this.check();
};
User.prototype.check = function() {
if (this.email.match(/^[a-z0-9!#$%&\'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&\'*+\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/ig)) {
console.log('Valid email');
} else {
console.log('Invalid email');
}
};
var user1 = new User("bob123@aol.com");
答案 3 :(得分:0)
您可以使用try
,catch
function User(email) {
this.email = email;
this.checkValid()
}
User.prototype.checkValid = function () {
var valid = false;
//or true if valid email
if(!valid) throw 'Not valid email';
}
try {
var user1 = new User("bob123@aol.com");
} catch(e) {
console.log(e);
}
但是在我看来,构造函数应该总是创建一个对象,所以我会做这样的事情:
function User(email) {
this.email = email;
}
User.prototype.isValid = function () {
if (this.email.match(/^[a-z0-9!#$%&\'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&\'*+\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/ig)) {
return true;
}
return false;
}
var user1 = new User("bob123@aol.com");
if(!user1.isValid()){
user1 = null;
}