香港六马会开奖结果-六合彩特码资料-本港台最快开奖直播

[2019]让您放心游戏,提供六合彩特码资料最丰厚回馈!,本港台最快开奖直播是为您电脑安全以及资金安全的考虑,所以说压实向感受娱乐首先应该进下载时必不可少的。

轻巧学习
分类:本港台最快开奖直播

自在学习 JavaScript(7):对象属性描述符

2018/01/11 · JavaScript · 对象

初藳出处: Dhananjay Kumar   译文出处:码农网/小峰   

在JavaScript中,你能够如下所示创制多少个指标字面量:

var cat = { name: 'foo', age: 9 };

1
2
3
4
var cat = {
    name: 'foo',
    age: 9
};

乍一看,好像对象cat有字符串和数字值那八个属性。但是,那不不过JavaScript解释器。在ES5中,介绍了品质描述符的概念。在大家世襲钻探属性描述符此前,让大家试着应对多少个难点:

  • 什么创设只读属性?
  • 何以制订不可胜言的品质?
  • 如何使属性不可配置?
  • 怎样规定叁个属性是不是是只读的?

借使您知道属性描述符,那么你就能够应对全部那个标题。

请看上边包车型大巴代码:

var cat = { name: 'foo', age: 9 }; var a = Object.getOwnPropertyDescriptor(cat, 'name'); console.log(a);

1
2
3
4
5
6
var cat = {
    name: 'foo',
    age: 9
};
var a = Object.getOwnPropertyDescriptor(cat, 'name');
console.log(a);

出口将如下所示:

图片 1

正如你在那看看的,那天个性有四个特点:

value保存属性的数据,而writable,enumerable和configurable则描述属性的别的特色。接下来我们将对这一个特征风姿浪漫风流倜傥演讲。

writable

属性的值是还是不是能够变动是由writable特征决定的。假设writable设置为false,那么属性的值无法改造,JavaScript将忽略属性值中的任何改造。请看上面包车型大巴代码:

var cat = { name: 'foo', age: 9 }; Object.defineProperty(cat, 'name', { writable: false }); console.log(cat.name); // foo cat.name = "koo"; // JavaScript will ignore it as writable is set to false console.log(cat.name); // foo

1
2
3
4
5
6
7
8
var cat = {
    name: 'foo',
    age: 9
};
Object.defineProperty(cat, 'name', { writable: false });
console.log(cat.name); // foo
cat.name = "koo"; // JavaScript will ignore it as writable is set to false
console.log(cat.name); // foo

您能够选择Object.defineProperty改善writable、enumerable和configurable特征的值。大家稍后会在这里篇散文中详尽座谈Object.defineProperty,但正如您在地点的代码片段中来看的那样,我们早已将writable属性设置为false,进而改造了name属性的值。JavaScript将忽视重新分配,並且name属性的值将保险为foo。

只要以从严情势运作代码,那么为了重新分配writable设置为false的属性值,JavaScript将抛出分外。请看上面包车型大巴代码:

'use strict'; var cat = { name: 'foo', age: 9 }; Object.defineProperty(cat, 'name', { writable: false }); console.log(cat.name); // foo cat.name = "koo"; // error

1
2
3
4
5
6
7
8
'use strict';
var cat = {
    name: 'foo',
    age: 9
};
Object.defineProperty(cat, 'name', { writable: false });
console.log(cat.name); // foo
cat.name = "koo"; // error

在那处,JavaScript以严谨格局运转,因而,当您重新分配name属性的值时,JavaScript将抛出特别,如下所示:

图片 2

那边的荒诞消息说,你不能够赋值到只读属性。也等于说,借使属性的writable特征设置为false,那么属性将充作只读属性。

configurable

天性的其余特色是或不是足以安排决计于configurable的值。假若属性configurable设置为false,则不可能改动writable和enumerable的值。请看下边包车型地铁代码:

var cat = { name: 'foo', age: 9 }; Object.defineProperty(cat, 'name', { configurable: false }); Object.defineProperty(cat, 'name', { enumerable: false });

1
2
3
4
5
6
var cat = {
    name: 'foo',
    age: 9
};
Object.defineProperty(cat, 'name', { configurable: false });
Object.defineProperty(cat, 'name', { enumerable: false });

在那,大家将name属性的configurable设置为false。之后,我们将enumerable设置为false。如前所述,黄金时代旦三个性质的configurable设置为false,那么您就不可能更正另贰个表征。

对此地点的代码,JavaScript会抛出一个TypeError卓殊,如下图所示。你会赢得不可能再度定义属性名称的不当:

图片 3

在选取configurable的时候,你需求深深记住,改动configurable的值只好做一遍。要是将品质的configurable设置为false,那么您就无法重新分配它;你不或者撤除对configurable的改过。请看上边包车型客车代码:

var cat = { name: 'foo', age: 9 }; Object.defineProperty(cat, 'name', { configurable: false }); Object.defineProperty(cat, 'name', { configurable: true });

1
2
3
4
5
6
var cat = {
    name: 'foo',
    age: 9
};
Object.defineProperty(cat, 'name', { configurable: false });
Object.defineProperty(cat, 'name', { configurable: true });

小编们在重新分配name属性的configurable,不过,JavaScript会对上述操作抛出一个TypeError,如下图所示。正如您所观察的,生机勃勃旦configurable被安装为false,就不能够撤销那么些改正。

图片 4

另贰个根本的专门的学问是,尽管configurable设置为false,writable也得以从true改善为false——但反之则不然。请看上边的代码:

var cat = { name: 'foo', age: 9 }; Object.defineProperty(cat, 'name', { configurable: false }); Object.defineProperty(cat, 'name', { writable: false }); cat.name = 'koo'; console.log(cat.name); // foo

1
2
3
4
5
6
7
8
var cat = {
    name: 'foo',
    age: 9
};
Object.defineProperty(cat, 'name', { configurable: false });
Object.defineProperty(cat, 'name', { writable: false });
cat.name = 'koo';
console.log(cat.name); // foo

假设不是在从严情势下,上边的代码不会抛出别的非常。正如笔者辈眼下所评论的,即便configurable为false,writable也足以从true变为false,反之则不然。另一个急需深深记住的机要事项是,你不可能删除configurable设置为false的习性。

var cat = { name: 'foo', age: 9 }; Object.defineProperty(cat, 'name', { configurable: false }); delete cat.name; // wont delete as configurable is false console.log(cat.name); // foo delete (cat.age); // will be deleted console.log(cat.age); // undefined

1
2
3
4
5
6
7
8
9
var cat = {
    name: 'foo',
    age: 9
};
Object.defineProperty(cat, 'name', { configurable: false });
delete cat.name; // wont delete as configurable is false
console.log(cat.name); // foo
delete (cat.age); // will be deleted
console.log(cat.age); // undefined

在下边包车型地铁代码中,你会发觉JavaScript不会删除name属性,因为name属性的configurable设置为false。

enumerable

对于一性子能,假诺您设置了enumerable:false,那么那本性格将不会产出在枚举中,由此它不能够用在诸如for … in循环那样的口舌中。

请看下边包车型客车代码:

var cat = { name: 'foo', age: 9 }; Object.defineProperty(cat, 'name', { enumerable: false }); for (let f in cat) { console.log(f); // will print only age }

1
2
3
4
5
6
7
8
var cat = {
    name: 'foo',
    age: 9
};
Object.defineProperty(cat, 'name', { enumerable: false });
for (let f in cat) {
    console.log(f); // will print only age
}

在这里边,你一定要得到age,因为name的enumerable被设置为了false。这是另叁个急需深深记住的严重性事项:通过设置enumerable:false,唯意气风发的品质将不可用于枚举。大家来看上面包车型地铁代码:

var cat = { name: 'foo', age: 9 }; Object.defineProperty(cat, 'name', { enumerable: false }); console.log(cat.name); // foo console.log('name' in cat); // true

1
2
3
4
5
6
7
var cat = {
    name: 'foo',
    age: 9
};
Object.defineProperty(cat, 'name', { enumerable: false });
console.log(cat.name); // foo
console.log('name' in cat); // true

在此处,name属性enumerable设置为false,但你能够访谈它。在自己商议name是或不是归属cat的习性时,你也会发觉是true。

奇迹,你恐怕必要检讨某些特定属性enumerable是还是不是设置为false或true。你能够经过应用propertyIsEnumerable方法来完毕这点:

var cat = { name: 'foo', age: 9 }; Object.defineProperty(cat, 'name', { enumerable: false }); console.log(cat.propertyIsEnumerable("name")); // false

1
2
3
4
5
6
var cat = {
    name: 'foo',
    age: 9
};
Object.defineProperty(cat, 'name', { enumerable: false });
console.log(cat.propertyIsEnumerable("name")); // false

结论

用作一名职业的JavaScript开荒人士,你必需对JavaScript对象属性描述符有三个很好的通晓,小编盼望您能从那篇文章中学到有的文化!请继续关怀大家的下风姿洒脱篇文章,继续求学JavaScript中更关键的定义。

1 赞 收藏 评论

图片 5

本文由香港六马会开奖结果发布于本港台最快开奖直播,转载请注明出处:轻巧学习

上一篇:简单粗暴地理解 下一篇:没有了
猜你喜欢
热门排行
精彩图文