我应该在js中声明原型中的构造函数吗?

时间:2013-06-18 04:06:55

标签: javascript

<script>
function User (theName, theEmail) {
    this.name = theName;
    this.email = theEmail;
}

User.prototype = {
    constructor: User,
    changeEmail:function (newEmail)  {
        this.email = newEmail;
        return "New Email Saved: " + this.email;
    }
}
// A User 
firstUser = new User("Richard", "Richard@examnple.com"); 
firstUser.changeEmail("RichardB@examnple.com");
</script>

此代码取自此处:http://javascriptissexy.com/oop-in-javascript-what-you-need-to-know/

问题:

是否需要这一行:constructor: User,?如果我删除了这一行,它仍然可以工作。

2 个答案:

答案 0 :(得分:2)

当我们使用new运算符或{}在javascript中创建新对象时,新创建的对象的构造函数属性指向构造函数。在你的情况下:

firstUser = new User("Richard", "Richard@examnple.com"); 

firstUser.constructorUser。  您的User.prototype也是如此。使用{}User.prototype创建新对象时,构造函数属性为Object。当您放置constructor: User时,只需将构造函数属性从Object更改为User,您的代码仍然有效。

答案 1 :(得分:0)

如果您使用新对象替换默认原型,则只需执行此操作,就像您使用User.prototype = {...}一样。您可以改为扩展默认原型:

User.prototype.changeEmail = function (newEmail)  {
   this.email = newEmail;
   return "New Email Saved: " + this.email;
}