手记

Confused with JavaScript prototype

They are two similar code below:

1.
<code>
function User(name) {
this.name = name;
}
User.prototype = { 'sex': 'man' };
var user = new User('Zhang');
alert(User.prototype['sex']);   // man
alert(user.constructor.prototype['sex']);   // undefined
alert(user.constructor.prototype.constructor === Object);   // true</code>
2.
<code>
function User(name) {
this.name = name;
}
User.prototype.sex = 'man';
var user = new User('Zhang');
alert(User.prototype['sex']);   // man
alert(user.constructor.prototype['sex']);   // man
alert(user.constructor.prototype.constructor === User);   // true</code>
My problem:

I'm wondering why the first piece code  "user.constructor.prototype['sex']" return "undefined", I think it would be "man".

Can somebody tell me?

--

Thanks for your comment Sky.

In the first implement, User.prototype.constructor is modified to Object, not User itself. Therefore user.constructor is equal to User.prototype.constructor, they are all Object.We can solve this problem by simply apply this code to User.prototype: User.prototype.constructor = User.

0人推荐
随时随地看视频
慕课网APP