笔记
一、继承补充
1.对象冒充
借助call或apply方法来修改父类的构造函数中的this指向,来完成属性的继承。
function Student(name) {
this.name = name;
}
Student.prototype.study = function () {
console.log('我爱学习');
};
function smallStudent(tag, name) {
this.tag = tag;
//需要为小学生添加name属性
// Student.call(this,name);//对象冒充
Student.apply(this, [name]);
}
var ss = new smallStudent('红领巾', '小明');
console.log(ss);
注意:由于方法在原型中,无法被子类继承
2.混合继承(对象冒充+原型链)
使用对象冒充完成属性的继承,使用原型链完成方法的继承
该方案是一个相对理想的继承方案(最常用的继承方案)
function Student(name) {
this.name = name;
}
Student.prototype.study = function () {
console.log('我爱学习');
};
function SmallStudent(tag, name) {
this.tag = tag;
//需要为小学生添加name属性
// Student.call(this,name);//对象冒充
Student.apply(this, [name]);
}
SmallStudent.prototype=new Student();//原型链继承
var ss=new SmallStudent('红领巾','小强');
二、正则
常用来进行数据的校验和字符串的操作
1.创建正则
var p=new RegExp();//
var p=//;
2.正则修饰符
//修饰符
- g 全局匹配
- i 忽略大小写
- m 多行匹配
/hello/g
/hello/gi
/hello/ig
3.正则搭配字符串使用
可以使用正则表达式来对字符串进行快速处理
- search
- match
- replace
4.正则对象的方法
- test 校验字符串 true false
- exec 校验 满足返回数组 null
var str='0123456123';
// var tag=/123/.test(str)
var tag=/123/.exec(str);
console.log(tag);
5.元字符
//常见的元字符:
/*
. 除了换行和结束符之外的任意字符
[] []中可以放置任意内容;[]的意思是匹配任意一个
[a-z]
[0-9] 表示范围 [0-9a-zA-Z]
[A-Z]
[^0-9] 非 非数字 [^a-zA-Z] 非字母
\d 数字 [0-9]
\w 单词 数字和字母 [0-9a-zA-Z]
\s 换行 缩进 空格
\D 非数字 [^0-9]
\W 非数字和字母
\S 非.....
*/
6.量词
/*
{m,} 大于等于m
{m,n} 大于等于m,小于等于n
{m} m个
+ 至少一个
* 0或多个
? 0或一个
*/
/*
^ 开头
$ 结尾
\ 转义字符
*/
三、匿名函数
没有名字的函数,就是匿名函数
由于匿名函数没有名字,不能通过名字来调用执行
所以,可以通过自执行来完成函数的执行。
(function (){
console.log('yes');
})();
匿名函数可以传递参数,也可以有返回值。
在陌生的开发环境中,使用匿名函数非常好,既可以立即执行,又可以不会污染变量作用域
四、闭包
闭包就是能够读取其他函数内部变量的函数(函数里面套函数,内部函数访问外部函数变量),在本质上,闭包是将函数内部和函数外部连接起来的桥梁。
闭包中的变量会一直存储在内存中,类似全局变量
1.闭包的应用场景:
//i是一个全局变量 for循环执行完了之后i的值4
//点击li,执行事件函数,打印i, 全局变量的i值为4
var lis = document.querySelectorAll('ul li');
for (var i = 0; i < lis.length; i++) {
(function (i) {//形参
lis[i].onclick = function () {
console.log(i);// 0 1 2 3
};
})(i);//实参
// (function (a) {
// lis[a].onclick = function () {
// console.log(a);// 0 1 2 3
// };
// })(0);//实参
//..
}
//当点击事件执行时,打印i,打印是局部变量i,不再是全局变量i
闭包可以模拟对象的私有属性