一、面向对象编程
1、用对象的思想去写代码,就是面向对象编程
2、写法:1) 过程式写法
2) 面向对象写法
3、面向对象编程(OOP)的特点:
1) 抽象:抓住核心问题
2) 封装:只能通过对象来访问方法
3) 继承:从已有对象上继承出新的对象
4) 多态:多对象的不同形态,不同的对象,收到同一消息可以产生不同的结果,这种现象称为多态性。
4、对象的组成
1) 方法——动态 对象下面的函数:叫做对象的方法
2) 属性——静态 对象下面的变量:叫做对象的属性
二、工厂方式
工厂方式 : 就是面向对象的封装函数
返回值 : 当new去调用一个函数:这个时候函数中的this就是创建出来的对象,而且函数的返回值直接就是this(隐式返回)
构造函数 : 用来创建对象函数就是构造函数
三、原型
1、原型:去改写对象下面公用的方法或属性,让公用的方法或属性在内存中存在一份(提高性能)
2、原型prototype: 要写在构造函数的下面
3、写法:
function 构造函数(){
this.属性
};
构造函数.原型.方法 = function (){
};
// 面向对象的使用
var 对象1 = new 构造函数();
对象1.方法();
4、原型链:实例对象与原型之间的连接,叫做原型链(_proto_隐式连接)
其基本思想是利用原型让一个引用类型继承另一个引用类型的属性和方法
通过原型链查找,一层一层的往上找。那么原型链的最外层是:Object prototype
四、包装对象:基本类型都有自己对应的包装对象:String、Number、Boolean
过程 : 基本类型会找到对应的包装对象类型,然后包装对象把所有的属性和方法给了基本类型,然后包装对象消失
var str = 'hello';
alert(str.charAt(1)); // 当执行这行代码时,基本类型找到对应的包装对象String.prototype.charAt = function (){},然后把包装对象把所有的属性和方法给了基本类型,接着包装对象消失
五、面向对象的常用属性和方法
1、hasOwnProperty(): 看是不是对象自身下面的属性 (一般是做判断用)
返回值:布尔值
2、constructor : 查看对象的构造函数 可以用来做判断
1) 每个原型都会自动添加constructor属性:构造函数.prototype.constructor = 构造函数,同时也可进行修改函数自身的constructor属性
2) for in的时候系统自带的属性是找不到的
function Aaa(){};
Aaa.prototype.constructor = Aaa; // 系统自带的属性
for(var attr in Aaa.prototype){
alert(attr); // 无法找到
}
3、用constructor也可以检测对象类型
var arr = [];
alert(arr.constructor == Array); // true
3、instanceof(运算符): 对象与构造函数在原型链上是否有关系,也可以检测对象
返回值 : 布尔值
function Aaa(){};
var a1 = new Aaa();
alert(a1 instanceof Aaa); // a1这个实例对象与创建的构造函数Aaa在原型链上有关系,返回true
可以通过instanceof检测是否是对象
var arr = [];
alert(arr instanceof Array); // true
4、toString()
我们先来检测一下toString()在哪里:
var arr = []; // 系统对象 : 我们把系统自带的对象,叫做系统对象
alert(arr.toString == Object.prototype.toString) // false
function Aaa(){};
var a1 = new Aaa();
alert(a1.toString == Object.prototype.toString) // true
通过检测我们发现:系统对象下面都是自带的,自己写的对象都是通过原型链找Object下面的
作用:1、把对象转换成字符串
2、可以传入一个参数(进制)
3、利用toString做类型的判断 (最好用的一种检测对象的方法)
Object.prototype.toString.call();
八、继承
1、继承:在原有对象的基础上,略作修改,得到一个新对象不影响原有对象的功能
2、继承的形式:(要做属性和方法继承的时候,要分开继承)
1) 属性的继承:调用父类的构造函数 call
2) 方法的继承:1、拷贝继承 for in(jquery 也是采用拷贝继承)
2、类式继承:利用构造函数(类)继承的方式
类:JS是没有类的概念,但是我们可以把JS中的构造函数看做的类
3、 原型继承:借助原型来实现对象继承对象
九、组件开发
组件开发 : 是对象的多种表现形式,提高对象的复用性,包括UI组件和功能组件(UI组件是效果,功能组件是具体的功能),将配置参数、方法、事件三者进行分离。
自定义事件 : 组件开发中的事件是指自定义事件,主要是跟函数有关系,就是让函数能够具备事件的某些特性,有利于多人协作开发
存在的问题:1、当参数不写的情况下会报错
2、当传递的参数有些传递有些不传递时,会出现顺序问题