目录
1.面向对象的特征
2.面向对象的继承方式
3.正则表达式
3.1如何创建正则表达式
3.2边界符
3.2[ ]方括号
3.3正则表达式中相关的方法汇总
3.4常用元字符含义
3.5常用量词
(1)原型链的方式来实现继承
子构造函数.prototype=Object.create(父构造函数.prototype);
子构造函数.prototype.constructor=子构造函数名;
(2)借用构造函数
父构造函数.call(this,实参1,实参1,...);
(3)组合继承
父构造函数.call(this,实参1,实参1,...);
子构造函数.prototype=Object.create(父构造函数.prototype);
子构造函数.prototype.constructor=子构造函数名;
(4)寄生式组合继承
在寄生式组合继承中,我们通过借用构造函数来继承属性,并通过原型链的混合形式来继承方法。这样可以避免组合继承中调用两次父类构造函数的问题,提高性能和代码复用性
// 定义父类
function Animal(name) {
this.name = name;
}
Animal.prototype.sayName = function() {
console.log("My name is " + this.name);
};
// 定义子类
function Dog(name, breed) {
Animal.call(this, name); // 借用构造函数继承属性
this.breed = breed;
}
// 寄生式继承原型链
function inheritPrototype(subType, superType) {
var prototype = Object.create(superType.prototype); // 创建父类原型的副本
prototype.constructor = subType; // 修正constructor指向
subType.prototype = prototype; // 将子类的原型指向父类的原型副本
}
inheritPrototype(Dog, Animal); // 继承
Dog.prototype.sayBreed = function() {
console.log("I am a " + this.breed);
};
// 创建实例
var myDog = new Dog("Buddy", "Golden Retriever");
myDog.sayName(); // 输出:My name is Buddy
myDog.sayBreed(); // 输出:I am a Golden Retriever
(5)寄生式继承
在寄生式继承中,我们会创建一个用于封装和增强已有对象的函数,然后返回这个新对象。这个函数会向对象添加额外的功能,而不会直接修改原有对象。
// 原始对象
var originalCar = {
make: "Toyota",
model: "Corolla",
year: 2020,
displayInfo: function() {
console.log(this.year + " " + this.make + " " + this.model);
}
};
// 寄生式继承的函数
function createNewCar(original) {
var newCar = Object.create(original); // 创建原对象的副本
// 增强对象:添加新属性
newCar.color = "blue";
// 增强对象:添加新方法
newCar.displayColor = function() {
console.log("The color of the car is " + this.color);
};
return newCar; // 返回增强后的对象
}
// 创建新的增强对象
var myCar = createNewCar(originalCar);
myCar.displayInfo(); // 输出:2020 Toyota Corolla
myCar.displayColor(); // 输出:The color of the car is blue
正则表达式就是一种用来匹配字符串中字符组合的模式,正则表达式也是一个对象那个。在JavaScript中主要于在表单验证。在学习过程中我们并不需要记忆大量的正则表达式,只需要记忆大部分字符的含义即可,在后续使用到正则表达式时可以直接进行搜索,然后拿别人写好的来用即可。
有两种创建正则表达式的方式,推荐使用第二种。修饰符只有三个:i(不区分大小写)g(全局查找)m(多行查找),修饰符是不分顺序的,可以写一个,也可以写多个。
(1)格式:var patt=new RegExp("规则",'修饰符');
注意:括号内的正则表达式规则和修饰符都需要加上引号,而且在使用到类似于\d的字符时,需要进行转义写为\\d。
(2)格式:字面量创建 var parr=/规则/修饰符
注意:此时不管是不是字符串,都不需要加引号,也不需要进行转义
在正则表达式中,边界符通常用来提示字符所处的位置,大部分情况下我们会将^和$搭配来使用,比较精确。
边界符 |
说明 |
^ |
表示匹配行首的文本(以谁开始) |
$ |
表示匹配行尾的文本(以谁结束) |
方括号内可以写入一个或者多个字符,也可以写入一个区间,然后查找时只需要包括其中一个就返回true。
表达式 |
描述 |
[abc] |
查找方括号之间的任何字符。(只要包含有a 或者 包含有b 或者包含有c 都返回为true) |
[^abc] |
查找任何不在方括号之间的字符。(方括号内部加上 ^ 表示取反,只要包含方括号内的字符,都返回 false 。) |
^[abc]$ | 查找只包含abc其中一个字母开头并结尾的字符( 三选一 只有是a 或者是 b 或者是c 这三个字母才返回 true ) |
[0-9] |
查找任何从 0 至 9 的数字。 |
[a-z] |
查找任何从小写 a 到小写 z 的字符。 |
[A-Z] |
查找任何从大写 A 到大写 Z 的字符。 |
[A-z] |
查找任何从大写 A 到小写 z 的字符。 |
[adgk] |
查找给定集合内的任何字符。 |
[^adgk] |
查找给定集合外的任何字符。(方括号内部加上 ^ 表示取反,只要包含方括号内的字符,都返回 false 。) |
(red|blue|green) |
查找任何指定的选项。 |
test() | 检验字符串中指定的值,返回true或false |
exec() | 检验字符串中指定的值。返回找到的值,并确定其位置 |
search() | 检索与正则表达式相匹配的值 |
match() | 找到一个或多个正则表达式的匹配,返回是数组或null |
replace() | 替换与正则表达式匹配的子串 |
split() | 把字符串分割为字符串数组 |
元字符 |
描述 |
. | 查找除了换行符和行结束符 |
\d | 查找数字,相当于[0-9] |
\D | 查找非数字字符。[^0-9] |
\w | 查找数字、字母及下划线 [0-9][A-z]_ |
\W | 查找非单词字符,就是\w取反 |
\s | 查找空白字符(空格符、回车符、换行符、制表符、垂直换行符、换页符) |
\S | 查找非空白字符。 |
量词 |
描述 |
n+ |
匹配任何包含至少一个 n 的字符串。(重复1次或更多次) 例如,/a+/ 匹配 "candy" 中的 "a","caaaaaaandy" 中所有的 "a"。 |
n* |
匹配任何包含零个或多个 n 的字符串。(|重复0次或更多次 ) 例如,/bo*/ 匹配 "A ghost booooed" 中的 "boooo","A bird warbled" 中的 "b",但是不匹配 "A goat grunted"。 |
n? |
匹配任何包含零个或一个 n 的字符串。(重复0次或1次) 例如,/e?le?/ 匹配 "angel" 中的 "el","angle" 中的 "le"。 |
n{X} |
匹配包含 X 个 n 的序列的字符串。(重复n次) 例如,/a{2}/ 不匹配 "candy," 中的 "a",但是匹配 "caandy," 中的两个 "a",且匹配 "caaandy." 中的前两个 "a"。 |
n{X,} |
X 是一个正整数。前面的模式 n 连续出现至少 X 次时匹配。(重复n次或更多次) 例如,/a{2,}/ 不匹配 "candy" 中的 "a",但是匹配 "caandy" 和 "caaaaaaandy." 中所有的 "a"。 |
n{X,Y} |
X 和 Y 为正整数。前面的模式 n 连续出现至少 X 次,至多 Y 次时匹配。(重复n到m次) 例如,/a{1,3}/ 不匹配 "cndy",匹配 "candy," 中的 "a","caandy," 中的两个 "a",匹配 "caaaaaaandy" 中的前面三个 "a"。注意,当匹配 "caaaaaaandy" 时,即使原始字符串拥有更多的 "a",匹配项也是 "aaa"。 |
n$ |
匹配任何结尾为 n 的字符串。 |
^n |
匹配任何开头为 n 的字符串。 |
?=n |
匹配任何其后紧接指定字符串 n 的字符串。 |
?!n |
匹配任何其后没有紧接指定字符串 n 的字符串。 |