#### 1.什么叫面向对象
面向对象是一种思想
把解决问题的关注点放到解决问题所需要的一系列对象上
面向过程是一种思想
把解决问题的关注点放到解决问题的每一个详细步骤上
2.面向对象的三大特性
封装
继承
多态
3.什么是对象
万物皆对象
4.什么是js对象
键值对儿的集合(无序)
5.名词提炼法
一句话中的所有的名词都可以被当做对象
6.如何用js对象模拟现实生活中的对象
属性对应特征
方法对应行为
7.创建对象的方式
使用对象字面量
使用内置的构造函数Object
使用简单工厂函数(不推荐使用)
自定义构造函数
8.传统构造函数中存在的问题
如果把方法定义在构造函数中,每创建一个对象,都会新建一个方法,这样
同样的代码会在内存中存在多份,造成资源浪费
9.如何解决问题
把方法提取出来定义在全局中,在构造函数中引用该函数
使用原型来解决,原型中的所有成员都可以被所有跟其关联的对象访问
10.原型是什么
在构造函数创建的时候,系统默认的会为这个构造函数创建并关联一个对象,这个对象就是原型对象
这个原型对象默认是一个空的对象,该对象中的所有成员可以被所有通过该构造函数实例化出来的对象访问
11.原型的作用
该对象中的所有成员可以被所有通过该构造函数实例化出来的对象访问
12.原型的使用方式(实现原型继承的方式)
1.利用对象的动态特性给原型对象添加成员
2.直接替换原型对象
3.通过混入的方式给原型对象添加成员
13.原型链
每一个构造函数都有原型对象,每一个原型对象都有构造函数,这样就形成一个链式的结构,称之为原型链
14.继承的实现方式
1.混入式继承 for-in
2.原型继承 通过更改原型链的结构,实现的继承,就是原型继承
3.经典继承 Object.creat() 有兼容性问题
//var 对象名 = Object.create(要继承的对象)
15.Object.prototype的成员
- constructor 属性 指向该原型相关的构造函数
- hasOwnProperty 方法 判断对象本身是否拥有某个属性 obj.hasOwnProperty("属性名")
- isPrototypeOf 方法 判断一个对象是不是另一个对象的原型对象 obj1.isPrototypeOf(obj2)
- propertyIsEnumerable 方法 先判断属性是否属于对象本身,如果不是,返回false,如果是,就继续判断属性是否可以被遍历,如果是才返回ture 反之则false
- toString toLocaleString 方法 转换成字符串 toLocaleString转换成本地格式的字符串
- valueOf 方法 当对象参加运算的时候,会首先调用valueOf方法获取对象的值,如果获取的值不能参与运算,则调用toString方法
-
proto 属性 指向对象关联的原型对象
16.Function eval
都可以将字符串转换成代码
不同点
Function 创建出来的是函数,不会直接调用,除非手动调用
eval 直接可以将字符串转换成代码,并执行
17.arguments
函数内部的一个对象,在函数调用的时候,系统会默认的将所有传入的实参存入该对象
arguments.length 表示传入实参的个数
arguments.callee 指向当前函数 (匿名函数中使用,因为他没有名字)