目标
-
理解面向对象开发思想
-
掌握 JavaScript 面向对象开发相关模式
-
掌握在 JavaScript 中使用正则表达式
JavaScript 的组成
-
ECMAScript - 语法规范
-
变量、数据类型、类型转换、操作符
-
流程控制语句:判断、循环语句
-
数组、函数、作用域、预解析
-
对象、属性、方法、简单类型和复杂类型的区别
-
内置对象:Math、Date、Array,基本包装类型String、Number、Boolean
-
-
Web APIs
-
BOM
-
onload页面加载事件,window顶级对象
-
定时器
-
location、history
-
-
DOM
-
获取页面元素,注册事件
-
属性操作,样式操作
-
节点属性,节点层级
-
动态创建元素
-
事件:注册事件的方式、事件的三个阶段、事件对象
-
-
面向对象与面向过程:
-
面向过程就是亲力亲为,事无巨细,面面俱到,步步紧跟,有条不紊
-
面向对象就是找一个对象,指挥得结果
-
面向对象将执行者转变成指挥者
-
面向对象不是面向过程的替代,而是面向过程的封装
面向对象的特性:
-
封装性
-
继承性
-
[多态性]抽象
prototype对象
JavaScript 规定,每一个构造函数都有一个 prototype
属性,指向另一个对象。 这个对象的所有属性和方法,都会被构造函数的所拥有。
这也就意味着,我们可以把所有对象实例需要共享的属性和方法直接定义在 prototype
对象上。
所有函数都有 prototype 属性对象。
-
Object.prototype
-
Function.prototype
-
Array.prototype
-
String.prototype
-
Number.prototype
-
-
...
blind call apply 对象
是函数的方法。 可以改变函数内this的指向对象
-
-
都是用来调用函数,而且是立即调用
-
但是可以在调用函数的同时,通过第一个参数指定函数内部
this
的指向 -
call 调用的时候,参数必须以参数列表的形式进行传递,也就是以逗号分隔的方式依次传递即可
-
apply 调用的时候,参数必须是一个数组,然后在执行的时候,会将数组内部的元素一个一个拿出来,与形参一一对应进行传递
-
如果第一个参数指定了
null
或者undefined
则内部 this 指向 window
-
-
bind
-
可以用来指定内部 this 的指向,然后生成一个改变了 this 指向的新的函数
-
它和 call、apply 最大的区别是:bind 不会调用
-
bind 支持传递参数,它的传参方式比较特殊,一共有两个位置可以传递
-
在 bind 的同时,以参数列表的形式进行传递
-
-
在调用的时候,以参数列表的形式进行传递
-
-
那到底以谁 bind 的时候传递的参数为准呢还是以调用的时候传递的参数为准
-
两者合并:bind 的时候传递的参数和调用的时候传递的参数会合并到一起,传递到函数内部
-
高阶函数
-
函数可以作为参数
function eat (callback) {
setTimeout(function () {
console.log('吃完了')
callback()
}, 1000)
}
eat(function () {
console.log('去唱歌')
})
-
函数可以作为返回值
function genFun (type) {
return function (obj) {
return Object.prototype.toString.call(obj) === type
}
}
var isArray = genFun('[object Array]')
var isObject = genFun('[object Object]')
console.log(isArray([])) // => true
console.log(isArray({})) // => true
闭包就是能够读取其他函数内部变量的函数, 由于在 Javascript 语言中,只有函数内部的子函数才能读取局部变量,
闭包的用途:
-
可以在函数外部读取函数内部成员
-
让函数内成员始终存活在内存中
正则表达式
正则表达式的作用
-
给定的字符串是否符合正则表达式的过滤逻辑(匹配)
-
可以通过正则表达式,从字符串中获取我们想要的特定部分(提取)
-
强大的字符串替换能力(替换)
正则表达式的特点
-
灵活性、逻辑性和功能性非常的强
-
可以迅速地用极简单的方式达到字符串的复杂控制
-
对于刚接触的人来说,比较晦涩难懂
常用元字符串
元字符 | 说明 |
---|---|
\d | 匹配数字 |
\D | 匹配任意非数字的字符 |
\w | 匹配字母或数字或下划线 |
\W | 匹配任意不是字母,数字,下划线 |
\s | 匹配任意的空白符 |
\S | 匹配任意不是空白符的字符 |
. | 匹配除换行符以外的任意单个字符 |
^ | 表示匹配行首的文本(以谁开始) |
$ | 表示匹配行尾的文本(以谁结束) |
限定符
限定符 | 说明 |
---|---|
* | 重复零次或更多次 |
+ | 重复一次或更多次 |
? | 重复零次或一次 |
{n} | 重复n次 |
{n,} | 重复n次或更多次 |
{n,m} | 重复n到m次 |
案例
验证手机号:^\d{11}$
验证邮编:^\d{6}$
验证日期 2012-5-01:^\d{4}-\d{1,2}-\d{1,2}$
^\w+@\w+\.\w+$
验证IP地址 192.168.1.10 :^\d{1,3}\(.\d{1,3}){3}$
var reg = new Regex('\d', 'i');
var reg = new Regex('\d', 'gi');
方式2:
var reg = /\d/i;
var reg = /\d/gi;
说明 | |
---|---|
i | 忽略大小写 |
g | 全局匹配 |
gi | 全局匹配+忽略大小写 |
与正则表达式相关的方法
1.regExp对象
test();
exec();只返回一个匹配到的结果且是数组,不管调用几次都返回第一个结果 ;如果没有匹配的元素就返回null;
2.string对象
match(); str.match( );
replace();替换 字符串的默认使用只替换掉第一个查找到的内容 //去除字符串中的空格
(1)str.replace(/\s/g , ''); (2) str.split( ' ').join(' ');
split(); 切割
search();
来源:https://www.cnblogs.com/BR-Tao/p/11025427.html