JavaScript中的对象描述符
16lz
2021-01-22
我们先创建一个对象:
var person = {
name: "Nicholas",
_job: "Software Engineer",
sayName: function(){
alert(this.name);
},
get job(){
return this._job;
},
set job(newJob){
this._job=newJob;
}
}
在这个对象中,我们定义了一个name属性和一个_job属性;至于以set和get开头的两处代码,他们共同定义了一个属性job。明显属性job和_job、name的是不同的,是的,JavaScript中的对象有两种不同类型的属性:数据属性和访问器属性。
name和_job是数据属性,job是访问器。数据属性和访问器属性的最大的不同就在于:当访问一个一个访问器属性时,得到get后面函数的返回值;给一个访问器属性赋值时,执行的是set后面的函数,这个函数以将要赋的值为参数:
console.info(person.job);//Software Engineer
person.job="Coder";
console.info(person.job);//Coder
console.info(person._job);//Coder
在set函数中我们通过this改变了_job的值(this指向person这个对象);
在了解了对象属性的类型后,我们再来看看对象属性描述符。每个对象的属性在创建是都带有一些特征值(用描述符表示),JavaScript通过这些特征值来定义它们的行为。
我们在创建person对象时没有为它的属性们指定描述符,但是它们都具有默认的属性描述符。属性的描述符通过Object.getOwnPropertyDescriptors()得到:
var descriptors= Object.getOwnPropertyDescriptors(person)
//descriptors的内容如下;
{
age:{value: 29, writable: true, enumerable: true, configurable: true}
job:{enumerable: true, configurable: true, get: ƒ, set: ƒ}
name:{value: "Nicholas", writable: true, enumerable: true, configurable: true}
sayName:{writable: true, enumerable: true, configurable: true, value: ƒ}
_job:{value: "Coder", writable: true, enumerable: true, configurable: true}
}
我们可以看到descriptors是一个对象,对象的键是所描述的对象的属性,值就是属性描述对象。我们挑前两个看看,正好是不同类型的属性:一个数据属性,一个访问器属性。我们可以看到数据属性的描述符对象有四个属性:value,writable ,enumerable ,configurable ;访问器属性的描述符对象也有四个属性:enumerable ,configurable,get,set ;
——————未完待续————————
更多相关文章
- JavaScript:使用函数参数检索javascript对象键
- javascripterror 为空或不是对象.
- JavaScript中的数学对象中的方法
- Javascript知识汇总------面向对象中继承(未完成)
- JS面向对象写法
- JavaScript 对象及初识面向对象
- 第三节(JavaScript 对象、日期,函数)
- 使用jackson json将属性添加到json字符串
- 一张图轻松搞懂javascript event对象的clientX,offsetX,screenX,