专栏首页赖权华的笔记JS笔记(二):对象

JS笔记(二):对象

//这个系列的到目前为止,可能以后一段时间内,都是《JavaScript权威指南》的学习笔记。

(一) 对象

对象是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)。

1 var A = Object.create(Object.prototype) //创建一个空对象,和{}、new Obeject()一样

(三) 继承

 1 //返回一个继承(原型)对象P所有属性的新对象
 2 function inherit(p){
 3     if(p == null) throw TypeError();
 4     if(Object.create)
 5         return Object.create(p);
 6     var t = typeof p;
 7     if(t !== "object" && t !== "function") throw TypeError();
 8     function f(){}
 9     f.prototype = p;
10     return new f();
11 }
12 
13 
14 var people = {name:'小明',weight:35}
15 var the_boy = inherit(people) //继承peop的属性
16 the_boy.hobbies = '旅游' //添加属性成员
17 var the_child = inherit(the_boy) //继承the_boy的属性
18 
19 console.log(the_boy.name)  //name来自people
20 console.log(the_child.hobbies) //hobbies来自the_boy

(四)  删除、检测、枚举属性

1 var people = {name:'小明',weight:35,hobbies:'旅游'}
2 
3 //检测属性是否存在,也是用 关键字 in
4 console.log('name' in people) //true
5 console.log('x' in people)  //false
6 
7 //遍历属性,使用for/in 循环语句
8 for(i in people)
9     console.log(i)
1 //删除属性,使用delete关键字
2 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,并且他们可以序列化和还原。

1 var people = {name:'小明',weight:35,hobbies:'旅游'}
2 
3 var p = JSON.stringify(people) //序列化对象
4 console.log(p)
5 
6 var po = JSON.parse(p) //还原
7 console.log(po)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python+Selenium笔记(一):环境配置+简单的例子

    #环境配置基于windows操作系统 #学习selenium要有一些HTML和xpth的基础,完全不会的建议先花点时间学点基础(不然元素定位,特别是xpth可能...

    free赖权华
  • Python Django框架笔记(一):安装及创建项目

    #推荐一本书《Python核心编程》(适合有一定基础的),美国人Wesley Chun编写的,京东、淘宝应该都有。我是觉得写的很好,详细、简洁、满满的干货,不...

    free赖权华
  • Python笔记(三):构建发布模块

    (一)     准备工作 1.   新建一个模块(名称自定义),存放要发布的模块代码。 2.   新建一个setup.py的模块(存放模块的元数据,描述相关信息...

    free赖权华
  • JavaScript权威指南 - 对象

    JavaScript对象可以看作是属性的无序集合,每个属性就是一个键值对,可增可删。 JavaScript中的所有事物都是对象:字符串、数字、数组、日期,等等...

    Esofar
  • php学习之类与对象基础知识,适合初学者

    在面向对象中,最重要的概念就是类和对象,比如,一个人类,每一个人都具有一定的属性和行为方法,这这些属性和方法具体到每一个人身上就是一个对象,一个大类就是有无数个...

    吾爱乐享
  • 简单了解Python多态与属性运行原理

    定义:多态是一种使用对象的方法,子类重写父类方法,调用不同子类对象的父类方法,可以产生不同的执行结果

    砸漏
  • PHP面向对象之类和对象

    首先既然你知道面向对象,那么 OOP 相信你并不陌生吧? 他的英文全称 Object Oriented Programming 直译为:面向对象编程

    hedeqiang
  • CSS语法

    选择符说明:CSS选择符(选择器) 选择符表示要定义样式的对象(标签名字),可以是元素本身,也可以是一类元素或者指定名称的元素,简单来说就是给对应的元素起个名称...

    爱知汇
  • 29.MyBatis体系结构与工作原理

    启动MyBatis时要解析配置文件,包括全局配置文件和映射器配置文件,这里面包含了我们怎么控制MyBatis的行为,和我们要对数据库下达的指令,也就是我们的SQ...

    编程之心
  • CSS 语法入门

    CSS 是前端开发的基础。CSS 規則由兩個主要的部分構成:選擇器,以及一條或者多條聲明。 CSS 是前端开发的基础,主要由两个部分构成:

    zucchiniy

扫码关注云+社区

领取腾讯云代金券