摘要:在写入访问器属性是,会调用函数并传入新值,这个函数负责决定如何处理数据表示能否通过删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性修改为访问属性。
1、数据属性
数据属性包含一个数据值的位置。这个位置可以读取和写入值。数据属性有4个描述其行为的特性。
[ [ Configurable ] ] 表示能否通过delete删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性修改为访问属性。默认为true
[ [ Enumerable] ] 表示能否通过for-in循环返回属性。默认为true
[ [ Writable ] ] 表示能否修改属性的值。默认为true
[ [ Value ] ] 包含这个属性的属性值。读取属性的时候,从这个位置读取,写入属性的时候,把新值保存在这个位置。默认为undefined
eg:
var p = {}; Object.defineProperty(p, "name", { writable: false, value: "nihao" })
2、访问器属性
访问器属性不包含数据值,他们包含一对儿getter和setter函数(不过,这两个函数都不是必须的)在读取访问器属性的时候会调用getter函数,这个函数负责返回有效的值。在写入访问器属性是,会调用setter函数并传入新值,这个函数负责决定如何处理数据
[ [ Configurable ] ] 表示能否通过delete删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性修改为访问属性。默认为true
[ [ Enumerable] ] 表示能否通过for-in循环返回属性。默认为true
[ [ Get ] ] 在读取属性时调用的函数,默认为undefined
[ [ Set ] ] 在写入属性时调用的函数,默认为undefined
eg:
var p = {get: 0}; Object.defineProperty(p, "name", { get: function (){ console.log("get"); return this.get; }, set: function (newVal) { console.log("set"); this.get = newVal; } })
3、读取属性的特性
Object.getOwnPropertyDescriptor(属性所在的对象, 属性名称);
返回值是一个对象,访问属性configurable 、enumerable、get、set四个属性,
如果是数值属性,返回的对象属性有configurable 、enumerable、writable、value四个属性
备注:
Object.defineProperties()函数可以定义多个属性
eg:
var p = {get: 0}; Object.defineProperties(p, {"name", { get: function (){ console.log("get"); return this.get; }, set: function (newVal) { console.log("set"); this.get = newVal; } }, "age": { writable: true, value: 11 } })
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/96197.html
摘要:字面形式允许你在不需要使用操作符和构造函数显式创建对象的情况下生成引用值。操作符以一个对象和一个构造函数作为参数鉴别数组有前一小结可以知道鉴别数组类型可以使用。属性是函数独有的,表明该对象可以被执行。这种函数被称为匿名函数。 引子: 1.JavaScript 中的变量类型和类型检测 1.1原始类型 1.2引用类型 1.3內建类型的实例化 1.4函数的字面形式 1.5正则表达式的字...
摘要:对象重新认识面向对象面向对象从设计模式上看,对象是计算机抽象现实世界的一种方式。除了字面式声明方式之外,允许通过构造器创建对象。每个构造器实际上是一个函数对象该函数对象含有一个属性用于实现基于原型的继承和共享属性。 title: JS对象(1)重新认识面向对象 date: 2016-10-05 tags: JavaScript 0x00 面向对象 从设计模式上看,对象是...
摘要:工厂模式优点集中实例化,可以传参等缺点分不清属于哪个对象我们先来谈谈优点,看例子集中实例化返回实例化对象返回返回不难看出,工厂模式比上面的例子减少了很多代码。 ECMAscript开发的两种模式:1.过程化 2.OOP(面向对象) 面向对象的语言有一个标志,那就是类的概念,而通过类可以创建任意多个具有相同属性的方法的对象。但是ECMAscript中没有类的概念! 又谈作用域 首先...
摘要:年,以为蓝本的建议被提交给了欧洲计算机制造商协会,。而且给未经声明的变量赋值在严格模式下会导致抛出的错误。这也正是使用操作符检测值时会返回的原因。函数检查过程是。但是这个转换过程会导致特殊的和值应用位操作时,这两个值会被当成来处理。 前言 本文是 Awesome JavaScript 系列文章的第一篇,本系列文章主要为 JavaScript 的一些常见知识点,是我在 JavaScrip...
阅读 3107·2021-11-19 09:40
阅读 2417·2021-10-14 09:42
阅读 1661·2021-09-22 15:34
阅读 1422·2019-08-30 15:55
阅读 743·2019-08-29 12:59
阅读 390·2019-08-28 18:28
阅读 1786·2019-08-26 13:42
阅读 1503·2019-08-26 13:29