目录
学习内容:
一、概念:
1.什么是“对象”:
不了解内部结构,知道表面的操作
2.什么是“面向对象”:
不了解原理的情况下,会使用功能
3.面向对象是一种思想,生活中处处可以应用,万事万物都是对象
二、面向对象
1.特点:
(1).封装:
不考虑内部实现,只考虑功能实现
人的因素:
用对象的人
写对象的人 用封装 把一堆属性和方法集合在一起
(2).继承:
目的:最大限度重用代码
多重继承 慎用
遗传,龙生龙凤生凤,老鼠的儿子会打洞
(3).多态:
表现的形式太弱
(4).抽象:
抓住核心问题
抽:抓
2.组成:
(1)属性:
变量:就是同一个东西,场景不同,称呼不同
(2)方法: 函数: 阐述同上
3.恶心点:
This 该方法指向属于谁
This 占了95%
4.js 中常见对象:
1)Array:数组,用来存储数据
2)data:日期
3)regexp: 正则,用字符串验证
4)object:可以理解为空对象,什么都没有,没意味着什么都可以往上添加
没有功能
三、怎么写对象
1.使用object:
Var obj=new object( );
New 出来的一个具体的对象
2.字面量创建/json:
写法简易,语法简单,但是重用性低
适用于整个程序里只有一个的对象
3.工厂方式
Var obj={ }
工厂方式:
Function createPerson(name,qq){
Var obj=new object( );
}
4.构造函数创建对象(推荐)
1) Eg:
function My(){
this.age=18;
this.name="ss"
this.move=function(){
}
}
var a=new My();
var b=new My();
这是一种构造函数
构造函数就是用来创建对象的
为了与其它的函数进行区分,我们将函数名的首字母大写
2)疑问:问什么a.move===b.move弹出的是false?
5.原型 prototype:
1)什么是原型:
公共汽车 js中表示改组对象公用的
2)类与对象:
(1)什么是类:模型
月饼模子、array、data
(2)什么是对象:
产品、实例
月饼、arr=[1,2,3]、data
3)原型是往类(模型/构造函数)上添加的:
Array.prototype.sum=function( ){ }
4)开发常用的模式:
构造函数加属性,原型加方法
也就是4+原型
五、系统对象
1.本地(非静态):
Object array data number boolean string function regexp error
2.内置(静态):
Math 你有用过呢哇math( )?
3.宿主:
DOM/BOM 浏览器提供的
六、三大特性
1.封装:
1)目的:将信息隐藏 以上的行为都属于封装
2)共有、私有:
其实真的没有私有共有的区别,只是在命名的时候进行一下区分,自己知道这种命名是私有的即可
function(){
//共有属性
this.name=name1;
this.age=age;
// 私有属性
var_sex="girl";
//公有方法
this.eat=function(){
alert("吃饭");
}
// 私有方法
var_xiuxiu=function(){
alert("美图秀秀");
}
}
2.继承:
目的:找到共性,精简代码,提高重用性
【1】
1)属性继承:call( ),apply( )
改变父级构造函数内部的this
Eg:
Function People(name){
This.name=name;
This.say=function( ){
Alert(“hello”);
}
}
Function student(name){
People.call(this,name);
}
2)原型继承:
B.prototype=A.prototype
这里有引用的问题
修改A就会有修改B,修改B就会修改A
3)原型继承(推挤):
For(var x in A.prototype){
- prototype[x]=A.prototype[x];
}
【2】子级对象原型指向父级对象实例
B.prototype=new A( );
B.prototype=constructor=B;
案例:朋友圈
【3】多态(JS中存在感很弱)
目的:使语言具有动态性,具有更好的通用性