面向对象
1 面向对象OOP
1.1 面向对象
对象:程序描述现实中一个具体事物的属性和功能的程序结构。事物的属性会成为对象的属性,事物的功能会成为对象的方法。
面向对象编程: 程序都是先将数据和功能定义在对象中,再按需使用对象的数据和功能
优点:便于大量数据和功能的维护和使用
特点:封装、继承、多态
1.2 封装
封装:创建对象集中保存一个事物的属性和功能,便于大量数据和功能的管理和使用
面向对象编程都要先封装对象,再按需使用对象的属性和功能
-
用{}直接量:
var 对象名={ 属性名:属性值, ... : ... , 方法名:function(){ ... this.成员 ... } }
对象的方法要访问对象自己的属性或方法,无法直接使用,这是因为所有对象的属性和方法默认都不在作用域链当中,任何程序无权自动进入对象中获取成员(没有加任何前缀的普通变量只能在当前作用域查找)
解决方法:不能直接在方法中使用对象名.成员名(紧耦合,每次更改需要同时改变函数内部的变量);只要对象自己的方法,要使用自己的成员,都要加this.属性名
this指定对象自动获得正在调用方法的.前的对象名,只与调用方法时的前缀有关,而与定义方法时的前缀无关 -
用new创建
//创建空对象 var obj=new Object(); //添加新成员 obj.属性名=值; obj.方法名=function(){};
本质:js中一切对象底层都是关联数组
js中对象的特点:- 对象创建完成后,依然可继续添加新成员
- 访问对象中不存在的属性,不报错!而是返回undefined
- 访问对象的成员,既可用.,又可用[“成员名”]
选择: 如果成员名是变化的,就必须用[变量]
如果成员名固定,就可用.简化与[""]等效
缺点: 一次只能创建一个对象;如果反复创建多个相同结构的对象时,代码重复很多
-
用构造函数创建统一类型的多个对象:
构造函数: 描述一类对象统一结构的函数,重用创建对象的代码!-
定义构造函数:
function 类型名(属性参数...){ this.属性名=参数; this.xxx = 值; this.方法名=function(){ ...this.属性名 ... } }
-
调用构造函数反复创建多个对象:
var obj=new 类型名(属性值,…)
new:- 创建一个新的空对象:var obj = {};
- 让子对象自动继承构造函数的原型对象obj.__proto__ = Base.prototype;
- 调用构造函数: Base.call(obj);
通过强行赋值的方式,为新对象obj添加规定的新属性,保存属性值</
-