1.前言
我这人有个缺点,非要逼自己一把才行,很容易受到情绪的影响,明天和老爸一起起床,不能睡太多,鲁迅说过:人这一辈子睡多少觉,吃多少饭是有个顶点的,谁先睡完吃完谁先走。
昨天说的计划做项目,结果早上起床想把昨天晚上想的,通过工具给css添加兼容前缀,搞了半天,用autoprefixer和webpack没搞定,编辑器总是显示编译成功结果没效果。webpack明明npm install webpack -g全局安装了,编译显示webpack不是内部命令。后来想想,不能事件都花在这了,问题先留着,后面项目碰到了再说,然后就开始继续看JS高级教程,之前看的面试题,关于创建对象和原型的问题,今天算了搞懂了大部分。
2.值类型与引用类型的差别
基本类型在内存中占据固定大小的空间,因此被保存在栈内存中
从一个变量向另一个变量复制基本类型的值,复制的是值的副本
引用类型的值是对象,保存在堆内存
包含引用类型值的变量实际上包含的并不是对象本身,而是一个指向该对象的指针
从一个变量向另一个变量复制引用类型的值的时候,复制是引用指针,因此两个变量最终都指向同一个对象
类型检测方式:typeof, instanceof( true or false)
3.面向对象(面试可吹)
面向对象不是新的东西,它只是过程式代码的一种高度封装,目的在于提高代码的开发效率和可维护性。
面向对象编程 —— Object Oriented Programming,简称 OOP ,是一种编程开发思想。
在面向对象程序开发思想中,每一个对象都是功能中心,具有明确分工,可以完成接受信息、处理数据、发出信息等任务。因此,面向对象编程具有灵活、代码可复用、高度模块化等特点,容易维护和开发,比起由一系列函数或指令组成的传统的过程式编程(procedural programming),更适合多人合作的大型软件项目。
面向对象的特性:
封装性:对象共有的属性,封装起来便于使用
继承性:构造函数可以有继承的,是基于原型
[多态性]:同一种行为,针对不同的对象,产生不同的结果。
面向对象的设计思想是:
抽象出 Class
根据 Class 创建 Instance
指挥 Instance 得结果
4.创建对象
对象:具体特指的某个事物,有特征(属性)和行为(方法)
* 1. 调用系统Object()----->创建出来的对象都是Object类型的,不能很明确的指出这个对象是属于什么类型

* 2. 字面量的方式{}----->只能创建一个对象(一次只能创建一个)

* 3.工厂模式创建对象----->----->推论---->自定义构造函数的方式

* 自定义构造函数(优化后的工厂模式)

* 自定义构造函数创建对象:4件事
* 1.在内存中申请一块空闲的空间,存储创建的对象
* 2.this就是当前实例化的对象
* 3.设置对象中的属性和方法(为对象添加属性和方法,为属性和方法赋值)
* 4.把创建后的对象返回
实例对象和构造函数之间的关系
* 1. 实例对象是通过构造函数来创建的---创建的过程叫实例化
* 2.如何判断对象是不是这个数据类型?
* 1) 通过构造器的方式 实例对象.构造器==构造函数名字
* 2) 对象 instanceof 构造函数名字
解析构造函数的过程

构造函数的问题
使用构造函数带来的最大的好处就是创建对象更方便了,但是本身也存在一个浪费内存问题
使用原型prototype完美解决
5.原型

什么是原型?
* 构造函数中有一个属性prototype,是原型,程序员使用的
* 实例对象中有一个属性__proto__,是原型,浏览器使用的,不是很标准的,
* 实例对象中的__proto__指向的就是该实例对象中的构造函数中的prototype
* 构造函数中的prototype里面的属性或者方法,可以直接通过实例对象调用
* 正常的写法:实例对象.__proto__才能访问到构造函数中的prototype中的属性或者方法
* 原型就是属性,而这个属性也是一个对象
* Person.prototype.属性或者Person.ptototype.方法()
原型的作用之一:数据共享,节省内存空间
* 原型的写法:
* 构造函数.prototype.属性=值
* 构造函数.prototype.方法=值---->函数.prototype,函数也是对象,所以,里面也有__proto__
* 简单的原型的写法
* 构造函数.prototype={
* 切记:如果这这种写法,要把构造器加上 };

属性成员的搜索原则:原型链
先在自己身上找,找到即返回
自己身上找不到,则沿着原型链向上查找,找到即返回
如果一直到原型链的末端还没有找到,则返回 undefined
原型共享数据
属性需要共享,方法也需要共享,不需要共享的数据写在构造函数中,需要共享的数据写在原型中
原型中的方法可以相互调用
通过原型给字符串添加倒序的方法

局部变量转换为全局变量

6.贪吃蛇案例
看的有点懵逼了,以后用到再说把。赶时间。
7.后记
培养面向对象的思想,万物皆对象,看到什么东西都可以想它的特征和行为,然后构造函数,写属性和方法。面向对象编程,面向对象编程,面向对象编程。
明天早上6点开始,继承和正则表达式。jQuery初步入门,写完这个看面试题去了。
网友评论