JS笔记(二):对象
(一) 对象
对象是JS的基本数据类型,类似于python的字典。然而对象不仅仅是键值对的映射,除了可以保持自有的属性,JS对象还可以从一个称为原型的对象继承属性,对象的方法通常是继承的属性。(这种对象之间属性的继承,应该就是JS对象和Python字典的主要区别)。还有另一个区别就是,JS对象可以设置属性特性,这里先跳过。
除了字符串、数字、true、false、null和undefined之外,JS的值都是对象。
(二) 原型
每一个JS对象都和另一个对象相关联。这里的“另一个对象”指的就是原型,每一个对象都从原型继承属性。
同使用{}一样,通过new object()创建的对象也继承自Object.prototype。通过new Arrray()创建的对象的原型就是Array.prototype,通过new Data()创建的对象的原型就是Date.prototype。
没有原型的对象为数不多,Object.prototype就是其中之一,它不继承任何属性。其它原型对象都是普通对象,普通对象都具有原型。所有内置构造函数(以及大部分自定义的构造函数)都具有一个继承自Object.prototype的原型。例如Date.prototype的属性继承来自Object.prototype,因此new Data()创建的Date对象的属性同时继承自Date.prototype和Object.prototype。这一系列链接的原型对象就是所谓的“原型链”。
感觉简单的说就是祖父对象-父对象-子对象…
动物-猫科动物-猫亚科-猫属-荒漠猫,子对象具有父对象的所有属性。(JS对象没理解错的话,应该就是属性成员的集合,所以对象之间属性的继承很容易理解,但是方法是怎么回事?(和其他面向对象语言一样,理解为“继承父对象的行为(操作)”好像有点牵强。))
看书里的意思(对象的方法通常是继承的属性),然后去看了下Object.prototype的实现才大概明白,这些方法其实应该也可以称为对象的属性。

Object.prototype应该就是JS中顶级的对象(大部分对象都继承自Object.prototype)。
var A = Object.create(Object.prototype) //创建一个空对象,和{}、new Obeject()一样
(三) 继承
//返回一个继承(原型)对象P所有属性的新对象
function inherit(p){
if(p == null) throw TypeError();
if(Object.create)
return Object.create(p);
var t = typeof p;
if(t !== "object" && t !== "function") throw TypeError();
function f(){}
f.prototype = p;
return new f();
} var people = {name:'小明',weight:35}
var the_boy = inherit(people) //继承peop的属性
the_boy.hobbies = '旅游' //添加属性成员
var the_child = inherit(the_boy) //继承the_boy的属性 console.log(the_boy.name) //name来自people
console.log(the_child.hobbies) //hobbies来自the_boy
(四) 删除、检测、枚举属性
var people = {name:'小明',weight:35,hobbies:'旅游'}
//检测属性是否存在,也是用 关键字 in
console.log('name' in people) //true
console.log('x' in people) //false
//遍历属性,使用for/in 循环语句
for(i in people)
console.log(i)

//删除属性,使用delete关键字
delete people.name
(五)getter、setter和属性特性
1、JS对象属性由键、值和一组属性特性构成
2、JS对象属性的值可以用getter和setter方法代替,getter和setter方法定义的属性叫存取器属性,它不同于数据属性,数据属性只是一个简单的值。
3、我们可以设置JS对象属性的特性,例如设置为不可枚举。(这个也是JS对象和python字典之间的另一个区别)
具体实现先跳过,先知道有这些功能,以后如果会用到,再具体了解下。
(六)序列化对象JSON
对象序列化,即将对象的状态转换为字符串,也可将字符串还原为对象。JS提供了JSON.stringify()和JSON.parse()来序列化和还原对象,这些方法都使用JSON作为数据交换格式。JSON的全称是JavaScript Object Notation ----JS对象表示法。JSON的语法是JS语法的子集,它并不能表示JS语法里的所有值,支持对象、数组、字符串、无穷大数字、true、false和null,并且他们可以序列化和还原。
var people = {name:'小明',weight:35,hobbies:'旅游'}
var p = JSON.stringify(people) //序列化对象
console.log(p)
var po = JSON.parse(p) //还原
console.log(po)

JS笔记(二):对象的更多相关文章
- Js笔记(对象,构造函数,原型,原型链,继承)及一些不熟悉的语法
对象的特性: 1.唯一标识性,即使完全不一样的对象,内存地址也不同,所以他们不相等 2.对象具有状态,同一个对象可能处在不同状态下 3.对象具有行为,即对象的状态可能因为他的行为产生变迁 Js直到es ...
- Java 读书笔记 (二) 对象和类
Java 作为一种面向对象语言,支持以下基本概念: 多态 继承 封闭 抽象 类 对象 实例 方法 重载 对象: 是类的一个实例,有状态和行为.以人为例,黄种人.白种人.黑种人为类,每一个具体的人为类的 ...
- EChart.js 笔记二
交互组件 Echart.js 中交互组件比较多.例如: legend(图例).title(标题组件).visualMap(视觉映射组件).dataZoom(数据缩放组件).timeline(时间线组件 ...
- 5月15日上课笔记-js中 location对象的属性、document对象、js内置对象、Date事件对象、
location的属性: host: 返回当前主机名和端口号 定时函数: setTimeout( ) setInterval() 二.document对象 getElementById(); 根据ID ...
- 前端之JavaScript:JS之DOM对象二
继续JS之DOM对象二 前面在JS之DOM中我们知道了属性操作,下面我们来了解一下节点操作.很重要!! 一.节点操作 创建节点:var ele_a = document.createElement(' ...
- 纯JS实现KeyboardNav(学习笔记)二
纯JS实现KeyboardNav(学习笔记)二 这篇博客只是自己的学习笔记,供日后复习所用,没有经过精心排版,也没有按逻辑编写 这篇主要是添加css,优化js编写逻辑和代码排版 GitHub项目源码 ...
- 4月5日--课堂笔记--JS内置对象
JavaScript 4.5 一. JS内置对象 1.数组Array a)创建语法1:var arr=new Array(参数); i. 没有参数:创建一个初始容量为0的数组 ii. ...
- web前端学习(四)JavaScript学习笔记部分(6)-- js内置对象
1.JS内置对象-什么是对象 1.1.什么是对象: JavaScript中的所有事物都是对象:字符串.数值.数组.函数 每个对象带有属性和方法 JavaScript允许自定义对象 1.2.自定义对象: ...
- 深入理解JS中的对象(二):new 的工作原理
目录 序言 不同返回值的构造函数 深入 new 调用函数原理 总结 参考 1.序言 在 深入理解JS中的对象(一):原型.原型链和构造函数 中,我们分析了JS中是否一切皆对象以及对象的原型.原型链和构 ...
- jQuery源码笔记(二):定义了一些变量和函数 jQuery = function(){}
笔记(二)也分为三部分: 一. 介绍: 注释说明:v2.0.3版本.Sizzle选择器.MIT软件许可注释中的#的信息索引.查询地址(英文版)匿名函数自执行:window参数及undefined参数意 ...
随机推荐
- 京东架构师的showtime京东个性化推荐系统实战
推荐系统核心任务是排序,从线上服务角度看,就是将数据从给定集合中数据选择出来,选出后根据一定规则策略方法进行排序. 线上服务要根据一定规则进行架构设计,架构设计是什么?每一次权衡取舍都是设计,设计需要 ...
- android UI:Fragment碎片
碎片(Fragment) 嵌入与活动中的UI片段,为了合理的分配布局而存在,这是我的简单理解.多用于兼顾手机与平板的UI,也适用于灵活高级的UI制作. Demo 简单的按键切换两片不同的Demo 新建 ...
- 安尼泰科T1行车记录仪说明书
点击下载:安尼泰科T1行车记录仪说明书 自己总结:行车记录仪_使用总结.rar PS:我的型号是T1C,但说明书也适合.
- 自己动手实现java数据结构(四)双端队列
1.双端队列介绍 在介绍双端队列之前,我们需要先介绍队列的概念.和栈相对应,在许多算法设计中,需要一种"先进先出(First Input First Output)"的数据结构,因 ...
- python实现定时任务
定时任务的实现方式有很多种,如windows服务,借助其他定时器jenkins运行脚本等方式.本文介绍的是python中的一个轻量级模块schedule. 安装 pip命令:pip install s ...
- SpringMVC入门学习(二)
SpringMVC入门学习(二) ssm框架 springMVC 在上一篇博客中,我简单介绍了一下SpringMVC的环境配置,和简单的使用,今天我们将进一步的学习下Springmvc的操作. mo ...
- spring cloud zuul 传递 header
最近在做一个项目时,发现在网关中调用和在子系统中调用request.getRequestURL()所得到的请求url是不一样的,在网关中得到的是通过域名访问的地址,而在子系统中得到的是网关发起的子系统 ...
- 如何简单的在 ASP.NET Core 中集成 JWT 认证?
前情提要:ASP.NET Core 使用 JWT 搭建分布式无状态身份验证系统 文章超长预警(1万字以上),不想看全部实现过程的同学可以直接跳转到末尾查看成果或者一键安装相关的 nuget 包 自上一 ...
- 【github&&git】6、SmartGit(试用期30后),个人继续使用的方法。
在我们做项目的过程中,我们会用到SmartGit这个软件来将本地的MAVEN项目push到国内的码云(https://git.oschina.net)或者是国外的github网站进行项目的管理,这个时 ...
- windows下navicate for mysql 零填充不显示
在mysql数据库中我们在需要某个字段时经常要用到零填充 zerofill,之前碰到了一个大坑,在数据表sql语句中明明规定了 unsigned zerofill:但是一直没有显示出来,以为自己写的s ...