5.19 json和面向对象

# 一、JSON
## 真正的json
1. json数据,可以放在json文件中,也可以出现在编程语言中
    - 是一种文本数据,有专门的文件存储,.json文件
    - 类似于:记事本文件:.txt
    - 有固定的语法要求
2. json是用来做什么的:通用数据
    - 是一种文本数据,用来作为服务器端和客户端数据交互时,存储数据
       
    - 是一种编程语言中的通用数据,任何一门编程语言,都能识别,都能解析,都认识
## 编程语言中的json
1. js中的json,类似于数组和对象,只不过还需要遵守json的要求,js中有提供json和数组对象的转换方法
    - 日常在js中,所谓的json数组,json对象,其实只是参考了json数据的名字,别名,起了个名字
    - 自身其实就是编程语言中的数组或对象
2. php中的json,字符,只不过可以将php的数组和对象,通过一些方法转成json的格式
3. 任何一门编程语言中,都提供有将自身的某些数据,转成json的方法

## 真正的json的格式
1. 必须是字符
    - 不允许使用双引号包裹,必须是单引号或反引号(json文件中不需要,json文件自身就是文本文件)
        - 如:
            - 在html文件中写css需要style标签,在css文件中不需要
            - 在html文件写js需要script标签,在js文件中不需要
2. json的格式,类似于js中的对象和数组
3. 键值对的key,必须使用双引号包裹
4. 在json中不允许出现函数、undefined、NaN,可以出现null
5. 不允许出现没有意义的逗号

## js对象和json的转换
1. json字符转对象:这个字符就得符合json的格式
    - JSON.parse(str);
        - 需要注意json的规则
2. 对象转json字符:这个对象只需要符合js中对象的规则即可
    - JSON.stringify(obj);
        - 需要注意js对象或数组的规则
        - 函数,undefined被忽略
        - NaN,被转成null

## js对象和json的转换场景
1. 拿到后端传过来的json数据后,将json数据转成js对象,方便前端js处理
    ```js
    var o = JSON.parse('{"name":null}');
    console.log(o);
    ```
2. 如果需要将js对象传给后端使用,后端不能识别js对象,但可以识别json数据,需要将js对象转成json数据,发给后端
    ```js
    var s = JSON.stringify({name:"admin"})
    console.log(s);
    ```
## 什么是json
- https://www.jianshu.com/p/658ac368e478
 
# 二、面向对象编程
1. 面向对象的分析和设计
    - 面向对象
    - 分析和设计
        - 需求:拆分,大规模的分工
        - 功能之间,精密的协作
           
   
    - 分工:将需求,拆分,拆分到能直接解决
        - 拖拽
            - 按下事件
            - 移动事件
            - 抬起事件
    - 协作:
        - 拖拽
            - 按下事件
                - 获取事件对象
                - 移动事件
                    - 拿到自己的事件对象和按下的事件对象
                - 抬起事件
                    - 清除移动
2. 面向的三大特点
    - 封装
    - 继承
    - 多态
3. 对象的创建
    - 字面量
        - `var obj = {}`
    - 构造函数
        - 构造内置函数
            - `var obj = new Object()`
        - 构造自定义函数
            - `var obj = new Fn();`
4. 工厂模式创建对象
    - 构造自定义函数,关键字new执行函数
    - 自定义构造函数时new的的原理:
自定义构造函数时new的的原理:
1. 创建一个新对象
2. 改变函数内的this指向,为这个新对象
3. 执行函数内的代码,并将新对象的__proto__指向该函数的prototype
4. 检查函数是否主动返回对象,如果没有,则返回这个新对象
 
5. 多次new同一个构造函数时,会在内存中产生了多个同名功能
但它们来自于同一个模板,浪费内存
原型的出现,就是为了解决 构造函数的缺点
可以让我们更合理、方便的给实例添加方法
否则构造函数只能给实例添加属性,不能合理的添加方法
注意:在函数的 prototype 里面存储的内容,
不是给当前函数使用的,
而是给将来new函数之后得到的实例对象使用的

6. 每一个对象都天生自带一个属性, __proto__
称之为原型链对象(隐式原型),是一个引用类型数据
因为实例对象的 __proto__ 和所属的构造函数的 prototype 是同一个对象
那么就可以通过构造函数向 prototype 中添加成员
于是实例对象在访问的时候自己没有,会自动去自己的 __proto__ 中查找
最终找到了构造函数的 prototype 中的成员
解决了之前构造函数的缺点
结论:
属性直接写在构造函数体内
方法写在构造函数的原型上
 

猜你喜欢

转载自www.cnblogs.com/xiaokeai233/p/12919982.html
今日推荐