面向对象的编程思想:
根据需求,抽象出相关的对象,总结对象的特征和行为,把特征变成属性;行为变成方法,然后定义js构造函数,实例化对象,
通过对象调用属性的方法,完成相应的需求
面向对象的特性:封装,继承,多态
封装:就是代码的封装,把一些特征和行为封装在对象中
原型的作用:
1.为了数据共享,把想要节省空间的属性或者方法写在原型对象中,达到了数据共享,实现了节约内存空间。
2.为了实现继承
原型的写法:
构造函数.prototype.属性=值
构造函数.prototype.方法=值
function Student(name,age,sex){
this.name=name;
this.age=age;
this.sex=sex;
}
//简单的原型写法
Student.prototype={
//构造器
constructor:Student,
height:"175",
weight:"55kg",
study:function(){
console.log()
}
}
继承:继承是为了数据共享
为了数据共享,改变原型指向,做到了继承----通过改变原型指向实现的继承
缺陷:因为改变原型指向的同时实现继承,直接初始化了属性,继承过来的属性的值都是一样的
只能重新调用对象的属性进行重新赋值
//解决方案:继承的时候,不改变原型的指向,直接调用父级的构造函数的方式来为属性赋值
即借用构造函数继承: 构造函数名字.call(当前对象.属性)
//借用构造函数可以解决属性的继承,并且值不重复的问题
缺陷:父级类别中的方法不能继承
this的指向:
普通函数中的this指向window
对象.方法中的this指向当前的实例对象
定时器方法中的this指向window
构造函数中的this指向实例对象
原型对象方法中的this指向实例对象
apply和call的使用方法:
apply的语法:
函数名字.apply(对象,[参数1,参数2......]);
方法名字.apply(对象,[参数1,参数2.....]);
call的语法:
函数名字.call(对象,参数1,参数2......);
方法名字.call(对象,参数1,参数2......);
作用:改变this的指向,只要是想使用别的对象的方法,并且希望这个方法是当前对象的,那么就可以使用apply或者是call的方法
改变this的指向
闭包:
闭包的概念:函数A中包含一个函数B,函数B中可以访问函数A中定义的变量或者是数据,此时形成了闭包
闭包的模式:函数模式的闭包,对象模式的闭包
闭包的作用:缓存数据,延长作用域链
闭包的优点和缺点:缓存数据
递归:函数中调用函数自己,此时就是递归,递归一定要有结束的条件
正则表达式:也叫规则表达式,按照一定的规则组成的一个表达式,这个表达式的主要作用是匹配字符串的
正则表达式的组成:是由元字符或者是限定符组成的一个式子
元字符:
. 除了\n以外的任意的一个单个字符
[ ] 范围
() 分组,提升优先级
| 或者
* 0次到多次
+ 1次到多次
? 0次到1次
\d 数字中的一个
\D 非数字
\s 空白符
\S 非空白符
\W 特殊符号
\w 非特殊符号
邮箱的正则表达式:
ab2121_3.-df@itash.com.cn
[0-9a-zA-Z_.-]+[@][0-9a-zA-Z_.-]+([.][a-zA-Z]+){1,2}