javaScript中Java式的类继承 :
1. 任何添加到构造函数对象中的属性都是类字段和类方法。
2. 原型对象的属性被类的所有实例所继承。
3. 类的每个实例都是一个独立的对象,直接给这个实例定义的属性不会为所有实例对象所共享。
对于Java类的实例方法来说,实例字段可以用做局部变量,而不需要使用关键字this来引用,JavaScript是没办法模拟这个特性的,但可以使用with语句来近似地实现这个功能(但不推荐):
F.prototype.toString = function(){
with( this ){
return name;
}
}
JSON.stringify() 会调用对象的toJSON方法;
正则表达式:
非贪婪与贪婪:/a*/会尽可能多地匹配,而且允许后续的正则表达式继续匹配称为贪婪匹配。如果在匹配字符后加上
问号就可以使正则进行非贪婪匹配如:“??”、“+?”、“*?”或“{1,5}?”,比如,正则/a+/可以匹配一个
或多个连续的字母a.当使用“aaa"作为匹配字符串时,正则会匹配它的三个字符。但是/a+?/也可以匹配一个或多个连续字母a,但它是尽可能少地匹配。
/a+?b/和/a+b/当使用”aaab“作为匹配字符串时,都匹配整个字符串。因为正则表达式的模式匹配总是会寻找字符
串中第一个可能匹配的位置。
带()的表达式一个用途是允许在同一正则表达式的后部引用前面的子表达式。通过“\”+数字实现。
例如:\1引用第一个带()的子表达式,\2引用第二个,注意:因为子表达式可以嵌套另一个子表达式,所以这个第几个是左括号的位置,如:
/(java(script)?)/ // \1表达外层的()\2表示里面的()
对正则中前一个子表达式的引用,并不是指对子表达式模式的引用,而指的是与那个模式相匹配的文本的引用。
如果不需要像()那样生成带数字的引用 ,也可以使用“(?:)”形式对子表达式进行分组,如:
/(java(?:script)?)/ // \2不会引用第二个()
“(?=p)”: 零宽正向先行断言,要求接下来的字符都与p匹配,但不能包括匹配p的那些字符:
/[Jj]ava(?=\:)/ 匹配字符串"java: the definitive guide"中的java,但不匹配"java in a nutshell"中的java,因为它后面没有冒号。
“(?!p)”: 零宽负向先行断言,要求接下来的字符不与p匹配
String中的正则:
search():它的参数是一个正则,返回第一个与之匹配的子串的起始位置,如果找不到返回-1,如果参数不是正则,则
会首先通过RegExp构造函数将其转换成正则,search()方法不支持全局检索,因为忽略修饰符g。
replace():第一个参数可以是正则,也可以是字符串。如果第二个参数中出现$加数字,那么replace将用与指定子表达
式相匹配的文本替换,replace第二个参数可以是函数。
match():参数为正则(或通过RegExp构造函数转换成正则),返回一个由匹配结果组成的数组。如果正则设置了修饰符
g,则返回数组包含字符串中所有匹配结果。如果没有g,则返回一个数组,第一个元素是匹配的字符串,余下的元素则是正则表达式中的()括起来的子表达式结果。
split():参数可以是字符串也可以是正则。
RegExp对象:
每个RegExp对象都包含5个属性,source是一个只读字符串,包含正则表达式的文本,global是一个只读布尔值,用
以说明这个正则是否带有修饰符g,ignoreCase表示i,multiline表示m,lastIndex是一个可读可写的属性,用于存储字符串下一次检索的开始位置。
exec():参数是一个字符串,如果没有找到匹配,返回null,如果找到一个匹配,返回一个数组,与match()方法一样,第一个元素包含与正则匹配的字符串,余下的元素是与()括号的子表达式相匹配的子串,属性index包含了发生匹配的字符串的位置,属性input引用的是正在检索的字符串。和match()不同的是,不管正则有没有g,exec()返回结果都一样。