面向对象精要-理解对象
1、创建对象
创建对象的两种方法:
使用Object构造函数
var person2 = new Object(); person2.name="Qian";
使用对象的字面形式
var person1={name:"Qian" };
对象添加以及修改时JavaScript会在对象上调用[[Put]]和[[Set]]方法
2、属性探测
2.1、使用“in”操作符
console.log("name" in person1)/*true*/
2.2、使用“hasOwnProperty()”方法
console.log(person1.hasOwnProperty("name"))/*true*/
3、删除属性
var person1={name:"Qian" }; delete person1.name; console.log(person1.hasOwnProperty("name"))/*false*/
4、枚举属性
for-in:可枚举属性的内部特征都被设置为true,for-in循环会枚举一个对象所有的可没经验属性并将属性名赋给一个变量
var person1 = {name:"Qian",age:12 } for(var item in person1){console.log(item)/*name age*/ }
Object.keys():获取一个对象的属性列表已备程序使用
var person1 = {name:"Qian",age:12 }; var properties = Object.keys(person1); for(var i=0;i<properties.length;i++){console.log(i) }
5、属性类型
数据属性:包含一个值
访问器属性:包含一个函数
6、属性特征
通用特征:
是否可遍历:[[Enumerable]]
是否可配置:[[Configurable]]---------->可以用delete删除
修改属性特征:Object.defineProperty()方法
例:修改某个对象属性使其变成不可以枚举且不可配置
Object.defineProperty(person1,"name",{enumerable:false,configurable:false }); console.log(person1.propertyIsEnumerable("name"))/*false*/
数据属性特征:
[[Value]]:创建对象时该特征自动赋值
[[Writable]]:布尔值,默认可以写
定义完整的数据属性:Object.defineProperty()
var person1 = {} Object.defineProperty(person1,"name",{value:"Qian",enumerable:true,configurable:true,writable:true })
访问器属性特征:
[[Get]]
[[Set]]
定义多重属性
Object.defieProperties()方法
var person1 = {} Object.defineProperties(person1, {_name:{value: "Qian",enumerable: true,configurable: true,writable: true},name:{get:function () {console.log("Reading me")}} })
获取属性特征:
Object.getOwnPropertyDescriptor()方法
var person1 = {name:"Qian" } var deseciptor = Object.getOwnPropertyDescriptor(person1,"name"); console.log(deseciptor.enumerable)/*true*/
7、禁止修改对象
[[Extensible]]:布尔值,设置为false,禁止新属性的添加
7.1、禁止扩展
方法:使用Object.preventExtensions()
检测方法:使用Object.isExtensible()
var person1 = {name:"Qian" } Object.preventExtensions(person1); console.log(Object.isExtensible(person1))/*false*/
7.2、封印对象
方法:Object.seal()
检测方法:使用Object.isSealed()
var person1 = {name:"Qian" }; Object.seal(person1); console.log(Object.isSealed(person1))/*true*/
7.3、冻结对象
方法:Object.freeze()
检测方法:Object.isFrozen()
var person1 = {name:"Qian" }; Object.freeze(person1); console.log(Object.isFrozen(person1))/*true*/
总结:
1、将属性视为键值对,对象视为属性的哈希表有助于理解JavaScript对象。
2、你可以用点好或者中括号访问对象的属性
3、用in操作符检测某个属性是否存在
4、属性的两种类型:数据属性和访问器属性
5、属性的特征
6、锁定对象的3中方式
转载于:https://www.cnblogs.com/QianBoy/p/8859036.html
面向对象精要-理解对象相关推荐
- Js面向对象的程序设计——理解对象
Js面向对象的程序设计 Js面向对象的程序设计 理解对象 属性类型 Js面向对象的程序设计 理解对象 示例 : var person=new Object(); person.name="N ...
- 面向对象的程序设计——理解对象
面向对象的程序设计 ECMA-262 把对象定义为:无须属性的集合,其属性可以包含基本值.对象或者函数. 理解对象 var person = new Object(); //创建对象 person.n ...
- 如何更准确的理解面向对象编程中的对象
现在面向对象的编程思想已经有好长的历史了,我们可能天天都在运用.我们应该如何理解它呢?100个人可能有100种答案,因为它太容易理解了,同时也是最难真正理会其含义的.理解好理解,但在实际的编程当中我们 ...
- 高程 第6章面向对象的程序设计 6.1 理解对象
面向对象(Object-Oriented,OO)的语言有一个标志,那就是它们都有类的概念,而通过类可以创建任意多个具有相同属性和方法的对象. ECMAScript中没有类的概念,因此它的对象也与基于类 ...
- Java入门姿势【面向对象:1】啥事面向对象、类和对象如何理解
面向对象是编程开发的一种编程范式. 这次我们来详细了解一下Java面向对象,面向对象的思想已经涉及到软件开发的各个方面,如:面向对象的分析,面向对象的设计.以及我们经常说的面向对象的编程实现 其余的一 ...
- 面向对象的程序设计1 理解对象—— JS学习笔记2015-7-4(第75天)
面向对象的程序设计一-- 理解对象 转载于:https://www.cnblogs.com/zhangxg/p/4621520.html
- js面向对象的程序设计 --- 上篇(理解对象)
前言 ECMAScript中没有类的概念,因此它们的对象与基于类的语言中的对象有所不同. ECMA-262把对象定义为:"无序的集合属性,其属性可以包含基本值,对象或者函数".正因 ...
- 《JavaScript面向对象精要》读书笔记
JavaScript(ES5)的面向对象精要 标签: JavaScript 面向对象 读书笔记 2016年1月16日-17日两天看完了<JavaScript面向对象精要>(参加异步社区的活 ...
- 《JavaScript面向对象精要》——第1章 原始类型和引用类型1.1 什么是类型
本节书摘来自异步社区<JavaScript面向对象精要>一书中的第1章,第1.1节,作者:[美]Nicholas C. Zakas 译者: 胡世杰 更多章节内容可以访问云栖社区" ...
最新文章
- 智慧城市锁定创新,智能AI助力智慧健康
- OpenKruise v0.8.0 版本发布:K8s 社区首个规模化镜像预热能力
- spark源码编译记录
- CSS干货直击:腾讯无边界访问控制体系建设
- ckeditor 图片上传_关于上传中国鸟类图库和哺乳动物图库物种数量及称号的最新规定...
- 自定义 URL Scheme 完全指南
- 谈谈JAVA工程狮面试中经常遇到的面试题目------什么是MVC设计模式
- 【最快人脸检测模型开源】libfacedetection开源
- ganlgia-rrdcached
- 论文绘图神器来了:哈佛博士后开源一行代码绘制不同期刊格式图表
- matlab 菲涅尔衍射,基于Matlab及菲涅尔衍射仿真.doc
- python课程计算bmi_Python第十一课 计算体脂率1.0
- 各位技术大牛们的逆袭集锦!屌丝们都看过来!
- 如何结交阿里P9,腾讯T4这样的大佬?
- matlab2018a出现error8怎么办
- html之div整体缩小,如何整体放大或缩小div元素
- 云ERP来的正是时候!
- Java DES 加密解密
- 细思极恐的“25号宇宙实验”的心理学启示:过于富足+缺乏边界=沉沦与毁灭?
- 芯片的设计流程和流片成本
热门文章
- Xcode 新项目删除 storyboard 文件
- C语言中用栈实现进制转换,利用栈实现进制转换问题
- python type help copyright_Python关于import的实验(8)__init__.py文件内部代码的执行以及内部的导入和内部的变量...
- jsp java 分离,java与jsp页面的字符串拼接和拆分
- Linux 面试最高频的 5 个基本问题!
- 为什么下一个十年的主战场在 Serverless?
- Python中字符串的介绍以及常见操作
- 文档的管理计算机,如何使用FTP自动同步备份电脑文件数据?
- 计算机应用基础(本)实训任务1,计算机应用基础(本)实训任务1-2.pdf
- 电脑删除linux系统,我的电脑现在装有XP和Linux两个系统,现在想删除Linux系统,开机不用选直接进入XP。不知怎么做??...