一、 ES5当中新增加了一些对象方法
1. Object.create(prototype, [descriptors])
- 参数介绍
prototype
一个对象,作为新创建对象的原型。如果 proto 参数不是 null 或一个对象值,则抛出一个 TypeError
异常。null表示没有原型对象(这样就创建了一个"干净的对象")
descriptors
一个对象值,可以包含若干个属性,属性名为新建对象的属性名,属性值为那个属性的属性描述符对象.(属性将做简单介绍,后面将详细解答)
**value**: 设置属性的值 **writable**: 布尔值,设置属性是否可以被重写,默认属性值为false(不能被重写) **enumerable**: 布尔值,设置属性是否可以被枚举,默认属性值为false(不能被枚举) **configurable**: 布尔值,设置属性是否可以被删除,默认属性值为false(不能被删除) **get**: 函数,设置属性返回结果(后面解答) **set**: 函数,有一个参数(后面解答)
-
var obj = Object.create(null)
No properties,创建了一个"干净"的对象;
-
创建一个带有value值的对象
var obj = Object.create(Object.create, { type: { value: 'objName' } }) console.log(obj.type) // objName
-
get、set使用
假设对象中存储了用户的密码,我们需要判断用户的密码有没有设置,如果没有则需要返回提示
如果修改密码,要根据对象中的jurisdiction字段,判断该用户是否有更改密码的权限
var account = Object.create(Object.prototype, {
name: {
value: '销售',
writable: false,
enumerable: false,
configurable: true
},
password: {
get: function () {
if (!this.jurisdiction) {
return '该用户没有权限修改密码'
}
if ((typeOf password === 'undefined')) {
return '该用户没有设置密码'
}
return '用户密码为:' + password // 如果设置了,则把密码返回出去
},
set: function (psw) {
if (this.jurisdiction) {
password = psw
}
}
},
jurisdiction: {
value: true,
writable: true
}
})
account.name // 输出 ‘销售’
account.password // 输出 ‘该用户没有设置密码’
account.password = '1809111000' // 输出 ‘用户密码为:1809111000’
account.jurisdiction = false;
account.password = '1809111010' // 输出 ‘该用户没有权限修改密码’