马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
感谢点赞、关注和收藏!
上一篇天生器,这一篇开始先容对象,留意不是相亲。
明确对象
ECMA-262 将对象界说为一组属性的无序聚集。严酷来说,这意味着对象就是一组没有特定序次的值。对象的每个属性或方法都由一个名称来标识,这个名称映射到一个值。正由于云云(以及其他还未讨论的缘故起因),可以把 ECMAScript 的对象想象成一张散列表,此中的内容就是一组名/值对,值可以是数据大概函数。 创建对象应该是我们在一样寻常工作中最常用的了,不多表明,直接举两个例子: - let person = new Object();
- person.name = "Nicholas";
- person.age = 29;
- person.job = "Software Engineer";
- person.sayName = function() {
- console.log(this.name);
- };
- // 上面等同于下面
- let person = {
- name: "Nicholas",
- age: 29,
- job: "Software Engineer",
- sayName() {
- console.log(this.name);
- }
- };
复制代码 属性的范例
此范例非彼范例,也就是这里的范例指的不是之前说的根本数据范例大概引用范例,而是夸大属性:
1. 数据属性
数据属性包罗一个生存数据值的位置。值会从这个位置读取,也会写入到这个位置。数据属性有 4 个特性形貌它们的活动。
- [[Configurable]]:体现属性是否可以通过 delete 删除并重新界说,是否可以修改它的特性,以及是否可以把它改为访问器属性。默认环境下,全部直接界说在对象上的属性的这个特性都是 true,如前面的例子所示。
- [[Enumerable]]:体现属性是否可以通过 for-in 循环返回。默认环境下,全部直接界说在对象上的属性的这个特性都是 true,如前面的例子所示。
- [[Writable]]:体现属性的值是否可以被修改。默认环境下,全部直接界说在对象上的属性的这个特性都是 true,如前面的例子所示。
- [[Value]]:包罗属性现实的值。这就是前面提到的谁人读取和写入属性值的位置。这个特性的默认值为 undefined。
要修改属性的默认特性,就必须利用 Object.defineProperty() 方法。这个方法吸取 3 个参数:要给其添加属性的对象、属性的名称和一个形貌符对象。末了一个参数,即形貌符对象上的属性可以包罗:configurable、enumerable、writable 和 value,跟相干特性的名称逐一对应。根据要修改的特性,可以设置此中一个或多个值。好比: - let person = {};
- Object.defineProperty(person, "name", {
- writable: false,
- value: "Nicholas"
- });
- console.log(person.name); // "Nicholas"
- person.name = "Greg"; // 在严格模式下,尝试修改只读属性的值会抛出错误。
- console.log(person.name); // "Nicholas"
复制代码 在调用 Object.defineProperty()时,configurable、enumerable 和 writable 的值假如不指定,则都默以为 false。 2. 访问器属性
访问器属性不包罗数据值。相反,它们包罗一个获取(getter)函数和一个设置(setter)函数,不外这两个函数不是必须的。在读取访问器属性时,会调用获取函数,这个函数的责任就是返回一个有效的值。在写入访问器属性时,会调用设置函数并传入新值,这个函数必须决定对数据做出什么修改。访问器属性有 4 个特性形貌它们的活动。
- [[Configurable]]:体现属性是否可以通过 delete 删除并重新界说,是否可以
|