现实生活中真的对象没有找到,在JavaScript 里左一个对象又一个对象,搞的我也是晕晕乎乎不知所云。人事复杂,人心难懂。我虽然是文科生,但是也不善于巧言。还是在js里面找找对象吧。那么我们今天就从js的对象开始入手。


昨天,我们讲过了js里面的数据类型分为两种,原始类型,对象类型。对象类型的组成又是由原始类型和对象类型共同组成的。

今天我们来了解一下对象的一些特征。使用对象无非是增(crate) 、删(delete)、改(set)、查(query);

对象由键值对儿组成,那么对象的属性(key)还有一些相关的属性: writable arrtibute (可写)、 enumerable attribulte(可枚举)、configurable attribute (可配置)

对象自身也有用三个相关的对象特征   prototype(对象的原型)、class(对象的类) 、(extensible)对象的扩展标记.

下面主要围绕这些属性和特征来对js的对象进行深入认识:

js的对象有三种:

1、 js的内置对象,

2、 宿主对象。如window 对象。

3、用户自己创建的对象。

js的属性有两种:

1、是当前对象自己的属性。(own property)

2、是继承的属性。             (inherited property)

一、创建对象

创建对象有三种方式:

1、用对象直接量的方式创建。例如 var obj  =  {x:1};  第二天的课程已经解释过了,什么是直接量,可以去参考下。

2、使用new关键字创建      。 例如 var obj = new Array();

3、 使用原型创建。              Object.create({x:1});

那么这三种对象有什么不一样吗,其实不一样的地方在于其各自继承的原型不一样。  使用对象直接量创建的继承的是Object原型。使用new关键字创建的对象继承的是 Array对象,然后Array对象又继承的Object对象。这就是js的原型链的一个体现。使用原型链创建就是继承的原型Object;

二、原型链

书中反复在提这个原型链,其实没有多么复杂的东西,就是被反复的强调复杂了,给人心理上造成一种复杂的感觉,完全可以用简单的话给描述清楚。

这个原型链,就像基因一样。爷爷把基因传给爸爸,爸爸把基因传给儿子,儿子又把基因传给孙子。爸爸可以产生自己的基因,儿子也可以产生自己的基因。哦,大致就是这样了。

三、属性访问

对象的访问有两种方式。可以通过 . 符号访问符。也可以通过[]来访问。用 . 访问,当该属性是系统的保留字或者是关键字的时候就会触发报错。但是[]却可以使用系统关键字与保留字。但应该尽量确保对象的属性不适用系统保留字。

四、删除属性

var  obj   = {x:2,y:4};

delete  obj.x;

删除属性,是指当前对象可以删除自己创建的对象。但是不能删除通过继承的属性,即不能删除父属性。

delete 关键字

五、检测属性。

var key  in  obj

obj.hasOwnProperty('key');   //判断该属性是不是自有属性,也就是不是继承的属性。

<script>var obj = {x:2,y:3};if(obj.hasOwnProperty('x')){alert('yes');}</script>

obj.propertyIsEnumerable('x'); //判断该属性是否可以枚举,枚举的概念上篇讲过了,就是可以被for/for in循环遍历。

 var obj = {x:2,y:3};if(obj.propertyIsEnumerable('x')){alert('yes');}

六、枚举属性:

for 与for in 循环。 是否枚举。

七:set 与get

八、属性的特征:

值(value)、 可写性(writable)、enumerable(可枚举)、configurable(可配置)

Object.getOwnPropertyDescriptor(obj,var) 得到列表。

<script>var obj = {x:2,y:3};var msg = Object.getOwnPropertyDescriptor(obj,'x');console.dir(msg);</script>

Object.defineProperty(obj,var,arr);  //设置单个属性

 <script>var obj = {x:2,y:3};var status  =  Object.defineProperty(obj,'x',{configurable:false,value:7});var msg     =  Object.getOwnPropertyDescriptor(obj,'x');console.dir(msg);</script>

Object.defineProperties();  //一次修改多个属性

 <script>var obj = {x:2,y:3};var status  =  Object.defineProperties(obj,{x:{value:100,writable:false,enumerable:false,configurable:false},y:{value:99,writable:false,enumerable:false,configurable:false}});var msg  = Object.getOwnPropertyDescriptor(obj,'x');console.dir(msg);</script>

9、对象的三个属性:

原型属性。

查看一个对象的原型可以通过Object.getPrototypeOf(obj)的方式来查看原型有哪些属性被继承下来了。

<script>var obj = {x:2,y:3};  //通过对象直接量创建对象,var msg = Object.getPrototypeOf(obj);console.dir(msg);</script>

因为我们刚才创建的对象是   var obj = {x:2,y:3};

如果没忘记的话,我们这种创建对象的方式叫做,使用对象直接量的方式创建。可以参考本文的第一个知识点,创建对象的三种方式。使用对象直接量创建对象,是调用了对象原型即Object对象。

可以通过isPropertyOf()放来来一个对象是否是另一个对象的原型。用法为p.isPrototypeOf(Obj).

 类属性:
暂时没用到

可扩展性。

可以通过Object.isExtensible()来判断对象是否可扩展。

可以通过Object.preventExtensions();将对象转为不可扩展。

一旦对象转为不可扩展,就不能转为可扩展了。

转载于:https://www.cnblogs.com/roverliang/p/4993436.html

《JavaScript权威指南》学习笔记 第三天 找个对象相关推荐

  1. JavaScript 权威指南-学习笔记(一)

    本文所有教程及源码.软件仅为技术研究.不涉及计算机信息系统功能的删除.修改.增加.干扰,更不会影响计算机信息系统的正常运行.不得将代码用于非法用途,如侵立删! JavaScript 权威指南-学习笔记 ...

  2. Javascript权威指南学习笔记一:数据类型

    决定从最基础的开始学JavaScript,最近看了<<Javascript权威指南>>第3章,记些笔记备忘. 本章一个重点是类型.按我的理解应该如下表所示: 复合类型中,关联数 ...

  3. javascript权威指南 学习笔记之变量作用域

    最近一直在看<javascript权威指南 第五版>,变量作用域这一章,看得真的有点累.不过,收获还是多多. 不知道,大家对语言中变量的"声明"与"定义&qu ...

  4. maven 一个简单项目 —— maven权威指南学习笔记(三)

    目标: 对构建生命周期 (build  lifecycle),Maven仓库 (repositories),依赖管理 (dependency management)和项目对象模型 (Project O ...

  5. javascript权威指南学习笔记

    一.数据类型: js中,所有的数字都是浮点型的. isNaN()/isFinite()     //检测数据类型 Infinity               //无穷大 Number.MAX_VAL ...

  6. javascript权威指南--学习笔记

    -一.JavaScript基本数据类型 1.数字--Number类 2.字符串--String类 3.布尔--Boolean类 4.函数Function 5.对象Object 6.数组Array 7. ...

  7. HTTP权威指南-学习笔记(三)HTTP方法,状态码

    1.HTTP请求方法 根据HTTP标准,HTTP请求可以使用多种请求方法. HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法. HTTP1.1新增了五种请求方法:OPTIONS ...

  8. 读《JavaScript权威指南》笔记(三)--对象

    1.对象介绍 对象是JavaScript的基本数据类型.对象是一种复合值:它将很多值(原始值或者其他对象)聚合在一起,可通过名字访问这些值.对象也可看做是属性的无序集合,每个属性都是一个名/值对.属性 ...

  9. 《JavaScript权威指南》笔记(四)

    2019独角兽企业重金招聘Python工程师标准>>> 第四篇笔记的内容主要涉及:javascript中的各种语句. 1. switch语句: (1)其中的case表达式采用===匹 ...

  10. 《JavaScript权威指南》笔记(一)

    2019独角兽企业重金招聘Python工程师标准>>> <JavaScript权威指南>真是名符其实的好书!真遗憾初学JavaScript时没有立即读这本书,甚为遗憾.不 ...

最新文章

  1. HMM -GMM 理清不错
  2. linux正则表达有话说
  3. android 图片放大缩小 多点触摸,Android 多点触摸(图片放大缩小)
  4. 【Linux】一步一步学Linux——trap命令(229)
  5. vim环境设置(应用于python编程)
  6. 第5课 - 线性表的本质
  7. [深度学习-实践]CycleGAN的入门例子-Tensorflow2.1-keras
  8. 数据安全,配置先行;如何检查,SQL 评估 API
  9. html 5 本地数据库(二)-- Web Sql Database核心方法openDatabase、transaction、executeSql 详解
  10. 通过Snap7与 LOGO!8PLC通信
  11. 【项目篇- 封面后目录前的核心内容、优势展示部分如何打磨?(超全图文总结建议)】创新创业竞赛项目计划书、新苗国创(大创)申报书
  12. icom对讲机写频线定义_ICOM对讲机的常见故障和使用中的问题
  13. 怎么用计算机管理员删除文件,管理员权限删除,教您如何删除需要管理员权限的文件夹...
  14. 水星路由器登录界面找不到服务器,新版水星(Mercurey)路由器后台登陆界面打不开怎么办?...
  15. Windows数字签名 数字签名(代码签名)流程
  16. 人工智能与大数据就业前景_人工智能就业方向及发展前景
  17. 四年级计算机课教学安排,四年级计算机教学的计划
  18. 数字图像处理(1)-采样,量化,空间分辨率,灰度级分辨率
  19. sqlserver数据库全量备份
  20. 凝固永恒瞬间的艺术 纪实摄影到底怎么拍

热门文章

  1. C++中,类如果包含map/list等对象,慎用memset(0)
  2. 入住互联网酒店平台的体验
  3. mysql8 json_table_新特性解读 | MySQL 8.0 json到表的转换
  4. 大华摄像头解码 ffmpeg_解码矩阵配套液晶拼接屏系统解决安防行业设备过于复杂的问题...
  5. 传统词向量nlp处理的优缺点_吴恩达深度学习笔记(126) | NLP | GloVe 词向量
  6. oracle中t,Oracle中如何用T
  7. dubbo monitor mysql_dubbo-monitor监控台的部署
  8. 如何修复MySQL配置文件?
  9. MyBatis开发经验总结
  10. 多线程之-并发任务间交换数据