在特定条件下创建对象

时间:2015-01-24 20:23:32

标签: javascript constructor conditional-statements

如何在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")

4 个答案:

答案 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;
&#13;
&#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)

您可以使用trycatch

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;
}