标签:包含 desc var 概念 script val this 理解 程序开发
创建自定义对象最简单的方式是创建一个Object的实例:
var person = new Object() person.name = ‘adhehe‘ person.age = 23 person.job = ‘程序开发‘ person.getName = function(){ return this.name }
使用对面字面量创建一个普通对象实例:
var person = { name:‘adhehe‘, age:23, job:‘程序开发‘, getName:function(){ return this.name } }
ECMAScript中有两种属性类型
数据属性
它包含一个数据值的位置,在这个位置可以读取和写入值。
[[Configurable]]:
[[Enumerable]]:
[[Writable]]:
[[Value]]:
要修改属性默认的特性,必须使用 Object.defineProperty()方法:
var person = {} Object.defineProperty(person,‘name‘,{ configurable:false,
enumerable:true, writable:false, value:‘adhehe‘ })
//一旦把属性定义为不可配置的,就不能再把它变回可配置了
//在调用此方法创建的新的属性时,如果不指定,则configurable、enumerable、writable默认值都为false
访问器属性
它不包含数据值,它包含一对getter函数和setter函数
[[Configurable]]:
[[Enumerable]]:
[[Get]]:
[[Set]]:
访问器属性不能直接定义,必须使用 Object.defineProperty()来定义。
var person = { name:‘adhehe‘, _age:23 } Object.defineProperty(person,‘age‘,{ get:function(){ return this._age; }, set:function(newVal){ if(newVal > 59){ this._age = ‘old‘; }else{
this._age = newVal;
} } }) person.age = 45; console.log(person.age)//输出 45 person.age = 65; console.log(person.age)//输出 old
Object.defineProperties()方法可一次定义多个属性:
var person = {} Object.defineProperties(person,{ name:{ writable:true, value:‘adhehe‘ }, _age:{ writable:true, value:23 }, age:{ get:function(){ return this._age; }, set:function(newVal){ if(newVal > 59){ this._age = ‘old‘; }else{ this._age = newVal; } } } })
Object.getOwnPropertyDescriptor()方法可取得给定属性的描述符:
//以前面person为例 var desc = Object.getOwnPropertyDescriptor(person,‘name‘);
console.log(desc.value) //adhehe
console.log(desc.configurable) //false
console.log(desc.get) //undefined
JavaScript基础概念之----面向对象----理解对象
标签:包含 desc var 概念 script val this 理解 程序开发
原文地址:https://www.cnblogs.com/adhehe/p/9787418.html