属性添加原理

  • 一个对象首次添加某一属性时,是调用对象内部的put方法
  • 一个对象修改某一属性是,是调用对象内部的set方法

属性是否存在

  • 使用 in 方法时,会检测【自有属性】+【原型属性】
  • 使用 hasOwnProperty 仅会检测【自有属性】
  • 使用 if 语句检测是不准备的,因为无法过滤假值
var obj = {name:"zk",age :19,id:0
}
console.log( "name" in obj);//true
console.log(obj.hasOwnProperty("name"));//true
console.log(Boolean(obj.id));//false

删除对象属性用 delete

  • 仅能删除自有属性,不能删除原型属性

属性遍历

  • 新添加的属性默认是【可枚举的】
  • for in 循环会遍历【自有属性】+【原型属性】
  • in 循环会遍历【自有属性】+【原型属性】
  • Object.keys() 循环仅会遍历【自有属性】

对象属性类型

  • 数据属性。包含一个值
  • 访问器属性。包含数据属性的值,还有读写(get、set)时调用的函数
  • 当你希望【读取】或【赋值】操作会触发一些行业时,才会使用sgetter和setter方法

例子

  • 注意!_name属性不可改为name,否则会造成内存益出!
  • 注意!get name方法其实已经为person声明了一个name属性了
var person = {age:19,_name:"gs",get name(){console.log("reading");return this._name},set name(val){console.log("setting name is ",val);this._name = val;}
}
//注意,上边的_name属性不可改为name,否则会造成内存益处!!!
//注意,这里,已经生成了name属性,同时有_name和name两个属性
console.log(person);//{ "age": 19, "_name": "gs", "name": "gs" }
person.name = "zk";
console.log(person);

属性特征

访问器属性

  • enumerable | configurable | get | set

数据属性

  • enumerable | configurable | value | writable

enumerable 是否可遍历

  • for in 查找不到该属性。但是 in 方法可以判断

configurable 是否可配置

  • 设为false时,不可用 delete 删除
  • 设为false时,将无法再更改为可配置

value 属性的值

writable 是否可写入

Object.defineProperty 定义属性
Object.defineProperties 同时定义多属性

  • 定义新属性时,必须要赋值,否则布尔型的特征会默认为 false
  • 有3个参数,对象 | 属性名 | 特征参数对象
var person = {age:19,_name:"gs",get name(){console.log("reading");return this._name},set name(val){console.log("setting name is ",val);this._name = val;}
}
//注意,上边的_name属性不可改为name,否则会造成内存益处!!!
//注意,这里,已经生成了name属性,同时有_name和name两个属性
console.log(person);//{ "age": 19, "_name": "gs", "name": "gs" }
person.name = "zk";
console.log(person);for(key in person){console.log(key);
}
Object.defineProperty(person,"name",{enumerable:false
})
Object.defineProperty(person,"age",{configurable:false
})
for(key in person){console.log(key);
}
delete person.age;
console.log(person.age);

Object.getOwnPropertyDescriptor 获取属性特性

  • 两个参数,1 为对象,2 为对象属性

Object.getOwnPropertyNames 获取属性名称

  • 参数为对象。返回值为所有属性名的数组

Object.getOwnPropertySymbols es6

Object.preventExtensions 使对象不可扩展
Object.isExtensible 判断是否可扩展

  • 参数均为对象

Object.seal 封印对象
Object.isSealed 判断对象是否被封印

  • 被封印对象是不可扩展的,且所有属性都不可配置

Object.freeze 冻结对象
Object.isfrozen 判断对象是否被冻结

  • 是一个封印对象 + 数据属性都为只读的对象
  • 被冻结对象无法解冻

javascript面向对象精要学习总结(第三章 对象)相关推荐

  1. javascript面向对象精要学习总结(第二章 函数)

    函数也是对象,但一点不同 函数存在一个 call 的内部属性,表明函数可执行 typeof 对任何具有call属性的对象,都返回"function" function fun(){ ...

  2. javascript面向对象精要学习总结(第一章 类型)

    原始类型共5种 string | number | boolean | undefined | null 内建引用类型共5种 Date | Error | Function | Object | Re ...

  3. 《JavaScript面向对象精要》——第1章 原始类型和引用类型1.1 什么是类型

    本节书摘来自异步社区<JavaScript面向对象精要>一书中的第1章,第1.1节,作者:[美]Nicholas C. Zakas 译者: 胡世杰 更多章节内容可以访问云栖社区" ...

  4. 《JavaScript面向对象精要》——第1章 原始类型和引用类型 1.1 什么是类型

    本节书摘来自异步社区<JavaScript面向对象精要>一书中的第1章,第1.1节,作者:[美]Nicholas C. Zakas著,更多章节内容可以访问云栖社区"异步社区&qu ...

  5. Javascript面向对象编程指南笔记 - 第三章 - 函数

    第三章 函数 第三章 函数 3-1 什么是函数 3-1-1 调用函数 3-1-2 参数 3-2 预定义函数 3-2-1 parseInt 3-2-2 parseFloat 3-2-3 isNaN 3- ...

  6. javascript面向对象精要学习总结(第六章 对象模式)待更新

    单对象的模块模式 定义单个对象,以自执行函数函数的方式 用闭包的方式,产生只通过特定方法访问的数据 var student = function(){var name = "gs" ...

  7. javascript面向对象精要学习总结(第五章 继承)

    原型对象继承 原理:原型对象的属性可以经由对象实例访问 下面的例子,所含[对象继承]和[构造函数继承],用于理解[原型属性经由对象实例访问] //对象继承 var person = {name:&qu ...

  8. javascript面向对象精要学习总结(第四章 构造函数和原型对象)

    constructor 实例的构造函数属性 它是实例的构造函数属性,指向创建它的构造函数 不要用它来检测对象的类型,因为它可以被覆盖,并不准确 检测对象类型最好使用 instanceof functi ...

  9. 《你不知道的javaScript》上卷——第二部分——第三章——对象

    文章目录 创建对象的两种方式 文字形式 构造函数的形式 两种方式的区别 类型 内置对象 String.Number.Boolean 有字面量形式和对象形式 装箱 null和undefined 只有字面 ...

最新文章

  1. SQL学习之数据列去空格函数
  2. Obj-C的hello,world 2
  3. SAP Business One on HANA登陆阿里云
  4. 升级 asp.net core 1.1 到 2.0 preview
  5. js笔记(10)之无缝滚动
  6. Ubuntu20.04搭建ftp服务(亲测通过)
  7. 数仓开发神器--DBeaver
  8. dbeaver can't connect HBase1.2 using phoenix driver #1863
  9. struts2 log4j_Struts2和Log4j集成示例项目
  10. 深度LINUX不喜欢
  11. ORACLE 36进制和10进制,互相转换函数
  12. 这才是程序员该有的桌面壁纸!
  13. 软考计算机中级网络工程师,计算机软考中级哪个最有用
  14. windows下微信多开
  15. 网红品牌终将祛魅,而伊利、康师傅这些老司机们却仍然历久弥新
  16. Linux防火墙firewalld只允许特定IP访问
  17. 文件夹加密超级大师 v13.10 是什么
  18. 【Java】Unicode转中文代码实现
  19. lansee无法双击进去计算机,局域网搜索LanSee工具,网管员神器
  20. level2买股技巧_同花顺level2使用技巧

热门文章

  1. SQL 视图,存储过程锁住了解锁的方法——最简单的方法
  2. TinyP2P如何运行 How tinyp2p works!
  3. 【赵强老师】什么是Docker Harbor
  4. 第八章 Java集合
  5. 深入了解存储器:快闪存储器介绍(下)
  6. 矩阵与矩阵相乘python代码实现
  7. Android 实用自定义Dialog页面加载动画
  8. TMP的阴影性能如何
  9. java学习第111天,p680-688(05/09)
  10. PyTorch系列 | _, predicted = torch.max(outputs.data, 1)的理解