1、面向对象
对象 :
是一个整体,描述一个事物的所有信息
一切具有相同属性和行为的物质
一切具有属性和方法的事物
对象数据类型 都有属性和方法
document.getElementById("").index = 0;
面向对象 : 是一种编程思想
面向对象的好处 :
功能独立 便于后期的管理和维护
防止全局变量的污染
面向对象 :体现的是生活逻辑
面向过程 : 体现的是数据逻辑
什么是类 :( js中的类就是构造函数)
类是具有相同属性和行为的一类事物的总称
对象和类的关系:
类是对象的抽象化(类是对象的抽象)
对象是类的具象化(对象是类的实例)
先有对象 后有类
js中:先写构造函数 再写new对象
2、对象创建的几种方式
一、字面量{}创建对象
var obj = {
sname : "lichune", 属性
tel : "666",
teach : function(){ 方法
}
}
二、new方式创建
var obj = new Object();
obj.sname = "lce";
obj.eat = function(){
}
缺点 :
创建多个同类对象时,代码会重复
此两种方案只适用于一次创建一个对象
3、工厂模式
工厂模式
可以创建多个同类的对象
创建方式:
1--定义一个函数
function 工厂(){
1、创建一个对象
var obj = new Object();
2、为对象添加属性和方法
obj.属性= "值";
obj.方法= function(){}
3、返回创建的对象
return obj
}
优点
创建多个同类对象时,代码不会重复书写
缺点
1、 一般对象是通过new关键字创建的,而工厂模式创建对象只是一种普通函数的调用 , 不符合对象的创建方案 不提倡使用
2、 不能确定某个对象属于哪一个构造函数
instanceof (测试某个对象属于哪一个构造函数)
定义
用来确定某个对象属于哪个构造函数
用法
对象 instanceof 构造函数名
例如(arr instanceof Array)
返回值是布尔类型,正确返回true,错误返回false
4、构造函数
说明 :
1、一般为了和普通函数进行区分,构造函数的函数名编写规范是 大驼峰 编写规范
2、写在构造函数内部的属性叫做实例属性,方法叫做实例方法
3、构造函数内的this指向通过构造函数new出来的对象
4、在构造函数内部,如果没有定时器或者事件,this一般指向new出来的对象
优点 :
对象创建方式规范,是通过new关键字创建的
能确定某个对象属于哪一个构造函数
缺点 :
多个同类对象被创建时,相同的方法会被重复创建
5、原型方法和属性
将属性和方法写在构造函数的外面
说明 :
1、写在构造函数外面的属性叫做原型属性
写在构造函数外面的方法叫做原型方法
2、通过构造函数.prototype.属性,创建原型属性
通过构造函数.prototype.方法,创建原型方法
优点 :
多个同类对象的相同方法是共享的,不会被重建
缺点 :
所有对象的属性名都相同
6、混合
将属性写成实例属性
将方法写成原型方法
解决了上面创建对象时遇到的所有的缺点
7、原型对象(原型对象就是原型)
定义
所有的构造函数都有一个prototype属性,这个属性就叫做原型对象
所有的构造函数new出来的对象都有一个原型对象(__proto__)(前后都是两个下划线)这个属性也指向原型对象
对象.__proto__
在原型对象上创建的方法是共享的。
Array.prototype String.prototype
面试题 : 在Array的原型上实现数组的去重
8、原型模式的执行流程
首先在实例上查找,如果有实例属性或方法就返回。如果没有,就去原型上查找,如果有就返回
如果原型上没有对应的属性或方法,就去最外层的Object.prototype上查找,如果有就返回,没有返回undefined
9、原型链
实例对象和原型之间的连接,就叫做原型链
原型链和作用域链的区别
作用域链:首先在函数内部查找某个变量,如果有就返回,不再向外查找,否则继续向函数外面查找(作用在普通函数上,查找全局变量和局部变量)
原 型 链:作用在构造函数上,查找实例属性和原型属性
10、原型中的关键字(扩展)
测试某个对象是否属于某个类的方法 isPrototypeOf()
语法:构造函数.prototype.isPrototypeOf(对象)
判断一个对象是否指向了该构造函数的原型对象,可以使用isPrototypeOf()方法来测试,结果为boolean类型 同 instanceof
delete :删除实例属性
语法 :delete对象.实例属性
是否包含该实例属性 hasOwnProperty()
语法: 实例对象.hasOwnProperty("实例属性")
包含返回true,否则返回false
是否存在该属性(原型或实例中)in
语法: "属性" in 对象实例
存在返回true,不存在返回false
思路
1、确定构造函数(特效名称)
2、确定构造函数的属性(特效操作的元素)
3、确定构造函数的功能(特效操作的方法)
入口方法init (页面一加载后的第一个功能)