js 原型问题,赋值方式不同,结果不同

新手上路,请多包涵
var User = function () {};

var admin = new User("Sam"),
guest = new User("Bob");

User.prototype.attributes = {
    isAdmin: false
};

/** 第一种 */
admin.attributes.isAdmin = true;   《======= 这边赋值

console.log(admin.attributes.isAdmin); // true
console.log(guest.attributes.isAdmin); // true

/** 第二种 */
admin.attributes = {   《=======这边赋值
    isAdmin:true
}

console.log(admin.attributes.isAdmin); // true
console.log(guest.attributes.isAdmin); // false  

为什么结果不同?

阅读 1.2k
1 个回答

读取过程会沿着原型链往上,但是写入不会

admin.attributes = {} 就表示向admin对象的attributes属性进行赋值。
admin现在应该是这样的

{
    attributes: {
        isAdmin:true
    },
    __proto__: {
        attributes: {
            isAdminL false
        }
    }
}

但guest是这样的

{
    __proto__: {
        attributes: {
            isAdminL false
        }
    }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题