<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,
?如果我删除了这一行,它仍然可以工作。
答案 0 :(得分:2)
当我们使用new
运算符或{}
在javascript中创建新对象时,新创建的对象的构造函数属性指向构造函数。在你的情况下:
firstUser = new User("Richard", "Richard@examnple.com");
firstUser.constructor
是User
。
您的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;
}