概念
- 什么是“对象”:不了解内部结构,知道表面的操作 ;
- 什么是“面向对象" :不了解原理的情况下,会使用功能 ;
- 面向对象是一种思想,生活中处处都可以应用,万事万物都是对象。
面向对象
1.特点:
1.1封装
- 不考虑内部实现,只考虑功能使用;
- 人的因素:用对象的人;写对象的人(用封装)。
1.2继承
- 目的:最大限度重用代码;
- 多重继承(慎用);
- 遗传,龙生龙凤生凤,老鼠的儿子会打洞。
1.3多态
表现的形式太弱。
1.4抽象
- 抓住核心问题;
- 抽:抓。
2.组成
- 属性:变量:就是同一个东西,场景不同,面向对象 组成 属性 称呼不同 ;
- 函数,阐述同上 。
3.缺点
- this该方法指向(属于)谁;
- this占了95%。
4.js中常见对象
- Array:数组,用来存储数据;
- Date:日期;
- RegExp:正则,用以字符串验证;
- Object:可以理解为空对象,啥都没有,没意味着啥都可以往上添加;没有功能。
怎么写对象
1.使用Object
- var ogj = new Object( );
- new出来的是一个具体对象。
2.字面量创建/json
- 写法简易,语法简单,但是重用性低;
- 适用于整个程序里只有一个的对象;
- var obj = { };
3.工厂方式
function creatPerson(name,qq){
var obj = new Object( );
}
4.构造函数创建对象(推荐)
构造函数:开辟内存空间;
析构函数:释放内存。
function My() {
this.age=18;
this.name="xiaoming;
this.move =function(){}
{}
var a = new My();
var b = new My();
- 这是一种构造函数;
- 构造函数就是用来创建对象的;
- 为了与其它的函数进行区分,我们将函数名的首字母大写。
为什么a.move == b.move弹出的是false?
5.原型prototype
5.1什么是原型
js中表示该组对象公用的(公共汽车)
5.2类与对象
什么是类:
- 模型:月饼模子,Array,Date。
- 成品
什么是对象:
产品,实例:月饼,arr=[1,2,3],date。
5.3原型是往类(模型/构造函数)上添加的
Array.prototype.sum =function(){}
5.4开发常用模式
- 构造函数加属性,原型加方法。
- 也就是4+原型。
系统对象
1.本地(非静态)
- Object
- Array
- Date
- Number
- Boolean
- String
- Function
- RegExp
- Error
2.内置(静态)
Math
有用过new Math( )?
3.宿主
- DOM/BOM
- 浏览器提供的
三大特性
1.封装
- 目的:将信息隐藏,以上的行为都属于封装
- 共有、私有:
function Girl(name,age){
//共有属性
this.name = name;
this.age=age;
//私有属性
var _sex = "girl";
//公有方法
this.eat = function()(
alert(“吃饭”);
}
//私有方法
var _xiuxiu = function(){
alert("美图秀秀”);
}
}
使用_来表示私有变量及私有方法。
2.继承
目的:
找到共性,精简代码,提高重用性。
目的1.
-
属性继承:call(),apply( )
-
改变父级构造函数内部的this;
-
function People(name){ this.name = name; this.say = function() { alert("hello"); } } function Student(name){ People.call(this,name); }
-
-
原型继承:B.prototype = A.prototype
- 这里有引用的问题 ;
- 修改A就会修改B,修改B就会修改A .
-
原型继承(推荐)
for(var x in Aprototype){
B.prototype[x]=A.prototype[x];
}
目的2.
- 子级对象原型指向父级对象实例 ;
- B.prototype =new A( );
- B.prototype.constructor=B;
3.多态(在js中存在感很弱)
目的:使语言具有动态性,具有更好的通用性。
原型链:对象调用属性或方法的寻找工程。
- 先在自己的构造函数中寻找,如果没有就到自己的原型中寻找,如果还没有,就到原型的原型中寻找,一直找到Obiect的原型,如果还没有就报错。