1.问题:程序中将来会保存大量的数据。而大量数据如果零散的随意管理,极易出错!而且用着不方便
2.解决:今后的程序中,都是用面向对象的方式。来管理大量的数据
3.什么是面向对像:程序中会将描述一个事物的多个属性和功能集中保存在一个对象结构中,再起一个名字。
4.优点:及其便于大量数据的管理维护
5.面向对象的三大特点:封装、继承、多态
6.封装:
(1)什么是封装:创建一个对象,集中保存现实中一个事物的属性和功能
(2)为什么:及其便于大量数据的管理维护
(3)何时用:今后,只要使用面向对象思想开发时,第一步都是先封装各种各样的对象结构备用
3种方式:
a.用{}:
i.如何:var 对象名={
属性名:属性值,
...... : ........,
方法名:function(){......}
}
ii.如何访问对象中的成员:
对象名.属性名
对象名.方法名()
函数VS方法: 1.不属于任何对像的,独立的function,称为函数 2.保存在对象内部的funciton,称为方法。 |
iii.今后,对象的方法中只要想使用对象的属性或其他方法时都用this
①什么是:每个函数自带的----不用创建,直接使用
专门指向正在调用当前函数的.前的对象的--内容
关键字---不能改名
②强调:今后,判断this指谁,一定不要看定义在哪儿,只看在哪里以何种方式调 用函数
用new:
(1).2步:
var 对象名 = new Object();//先创建空对象{};
强行给对象添加新属性和新方法
对象名.新属性=属性值
对象名.新方法=function(){....this.属性名.....}
(2)揭示了js语言对底层的核心原理:其实,js中所有对象底层都是关联数组
i.存储结构:都是名值对儿的组合
ii.访问成员时:标准写法都是:对象名/数组名['成员名']
简写都是:对象名/数组名.成员名
特殊:如果成员名是数字时,不能用.只能用[数字]
如果成员名是变量,只能用[变量],不要加""
iii.强行给不存在的位置赋值,不但不会报错,而且还会自动添加该属性
固定套路:如何给一个对象添加新属性或方法:
只有唯一的野蛮方法:强行赋值
iv.强行访问不存在的位置的值,都不会报错,而是返回undefined.
如何判断一个对象中是否包含该成员:
if(对象.成员名 !== undefined)//说明包含该成员
v.都可以用for in循环遍历
for (var 属性名 in 对象名/数组名){
//in会自动取出对象或数组中每个:前的属性名,保存到in前的变量中。
//如果想进一步获得属性值:
对象名/数组名[属性名]
}
构造函数:
(1)问题:用{}一次只能创建一个对像。如果像创建多个相同结构的对象时,代码就会很多重 复,--及其不便于将来的维护
(2)解决:今后,只要想反复创建多个相同结构,只是内容不同的对象时,都用构造函数。
(3) 什么是:描述同一类型的所有对象的统一结构的函数
(4)为什么:代码重用!
(5)如何:2步
i.定义构造函数:
function 类型名(形参1,形参2,......){
//将来要加入到新对想像中的规定属性
this.属性名=形参1;
this.xxx = xxx;
this.方法名 = function(){...this.属性名...}
}
ii.如何使用构造函数反复创建多个相同结构的对象
var 对象名 = new 类型名(实参1,实参2,....)
创建 指定类型的一个新对象
同时把实参值传给构造函数的形参变量
(6)new做的4件事:
1.创建一个新的空对象等待
2.?;
3.调用构造函数:
i.将构造函数中的this->new刚创建的新对象
ii.在构造函数内通过强行赋值方式,为新对象添加规定的属性和方法
4.返回新对象的地址,保存=左边的变量里
(7)问题:如果将方法定义(function)写在构造函数内,则每new一个对象,就会执行一次function,就会创建完全相同的新的函数副本。----浪费内存!