05 this 在不同环境下的指向 和正则

1.this

2.正则

-------------------------------------------

1.this

当前 事件源

this 是 关键字 指的是调用函数的那个对象(指向函数的拥有者)


$("this").css('color','#f60').siblings().css('color','#333');

-------------------------------------------
(1)在函数中引用!!!!!!

var x=1;
function test(){
this.x;
}
console.log(x);

1

--------
var x=1;
function test(){
this.x;
}
test();
console.log(x);

1
--------
var x=1;
function test(){
this.x = 0;
}
test();
console.log(x);

0
--------

var x=1;
function test(){
this.x = 0;
}
function test1(){
this.x = 2;
}
test();
test1();
console.log(x);

2 //test1 后面调用

--------

var x=1;
function test(){
this.x = 0;
}
function test1(){
this.x = 2;
}
test1();
test();
console.log(x);

0 //test 后面调用


在函数里面 如果函数没有声明 那么 指向的是window 的变量 如果声明了 那么就是以函数为范围。

--------

--------------------------------

(2)对象调用 !!!!!!

var o = {};

o.a = 1;

o.action = function(){

return this.a;


}

console.log(o.action());


1

//this 指的是当前对象


--------

//对象中调用外部函数 call() apply() 在一个对象中调用另外一个对象

//call(this,name,age) 如果什么都没有传 那么默认就是 window !!!!!!

//apply(this,[数组]) (在一个对象中调用另外一个对象) !!!!!!!!!!!!!!!!!!

function test(){
return this.a;//this 指向o o是这个函数的拥有者

}
var o = {};//对象
o.a = 1;

o.action = test;
console.log(o.action());


//1

PS:this 始终指向 函数的拥有者(调用者) 在这里 函数拥有者是 o 这个对象 所以指向的就是o


------------------------------------------------


//改变this 的指向

var a='111';
function test(){
return this.a;//这里指向的是window

}
var o = {};

o.a = 1;

o.b = test;
console.log(o.b.call());
//call() 在一个对象中调用另一个对象 这里指向 window

//111


PS: call() 什么都没有穿 this 默认是指向window

要是想指向 o这个对象 那么 .call(o); 这样就可以了

-------------------------------------

在call 传入指向后

var a='111';
function test(){
return this.a;//这里指向的是window

}
var o = {};

o.a = 1;

o.b = test;
console.log(o.b.call(o));
//call() 在一个对象中调用另一个对象 这里this指向 o 这个对象

//1


---------------------------

(3)构造函数调用 !!!!!!


function Fun(name,age){
this.name = name;//this 指向的是实例化的对象
this.age = name;

}
var fun = new Fun('shaozhu',22);
var fun2 = new Fun('qq',32);
console.log(fun2.name);

qq


//PS this 在构造函数中 指向的是实例化的对象


---------------------------

多记住经典例子

this指向!!!!!!!!!!!!


//分享一个面试题目

var number = 1;

var obj = {
number:2,
showNumber:function(){
this.number = 3;
(function(){
console.log(this.number);//自调函数 属于window 1
})();
console.log(this.number);//3 这里是当前函数
}
};
obj.showNumber();

1

3

PS:this 在自调用 this 指向的是window

------------------------------------

正则!!!!!!!!!!!

用的最得的就是 校验! 表单的校验

var filter = /^[a-z]at$/;//方法一
var value = 'cat';
if(filter.test(value)){
console.log('ok');
}else{
console.log('no');
}

-----------------

var filter2 = new RegExp('^[a-z]at$');//方法二
var value = 'cat';
if(filter2.test(value)){
console.log('ok');
}else{
console.log('no');
}


---------------------------------------------------

 和 B

 匹配一个单词的边界

表达式:hi

能匹配:hi this


B

匹配一个单词没有边界的

表达式:BhiB

能配置:thiis

hi

-----------------

d 和 D

d 匹配一个数组字符

能配置 0-9

D 匹配一个非数字

除了0-9 其它的都可以


-----------------

w 和 W

w 匹配字母/数字/下划线

W 匹配除 字母/数字/下划线

-----------------
^ 和 $

'^' 表示字符串的开头

$ 表示字符串的结束


^shaozhu$

shaozhu

只能匹配这一个


-----------------

[]

方括号"[]" 匹配指定一堆字符中的一个

^[a-z]at$

//a-z 的一个开头 然后 at 结尾

能匹配的字符串(举例)

cat mat zat

----------------


如果大小写都想匹配 那么

^[a-zA-Z]at$
//a-z A-Z 的一个开头 然后 at 结尾


能匹配的字符串(举例)

Cat mat Zat zat


---------

^[aeiou]at$

能匹配的字符串(举例)

aat aet iet oat uat

----------------------------------


"[^]" 这个是 不匹配这个集合任何的一个字符 有点取反的意思


例子:

^[^xyz]at$


不能匹配的字符串(举例) 注意这里的不能的!!!

xat yat zat
----------------------------------

重复符号 “+”

+ 表示 前一模式 可以被重复1此 或多次

表达式 ^go+gle$


o 可以被重复一次或者N次(最少一次 最少有一个o)

google

gooogle

----------------------------------

表达式

^g[aeiou]+gle$


能匹配的字符串(举例)

gagle

gegle

geagle

geaeeaioueagle


----------------------------------

"*" 表示前一模式可以被重复0次或n次


^go*gle$ //g 开通 o 可以被重复0次或n次 gle结尾

ggle

google

gooooooogle

----------------------------------

"?" 表示前一模式 可以被匹配0次或者一次

^go?gel$ g开头 中间 o 匹配0次或者一次 gle结尾


ggle gogle


----------------------------------

+ 可以被重复1此 或多次

* 重复0次或n次

? 匹配0次或者一次


----------------------------------


重复符号 {x}

{x}表示 前一模式 模式可以被重复x次


^go{2}gle$


能匹配的字符串 只能重复2次 必须重复2次

google

----------------------------------

{x,y}

表示 前一模式可以被重复x到y次

表达式 ^go{2,4}gle$

g开头 o必须重复 2-4次 gle结尾

能匹配的只有这三个!!!

google

gooogle

goooogle


----------------------------------


{x.}


前一个模式 至少被重复 x次 贪婪模式


----------------------------------


子表达式 ‘()’

可以指定一堆字符来匹配一个模式。

表达式: ^(very )*lange$

能匹配的字符串(举例)

large

very very lange

very lange

very very very very lange


---------------------------------

| 分支 用来指定指定几个规则只要匹配一个规则即可成匹配

表达式: ^com$|^org|^net$

只能匹配 com org net

^com$|
^org|
^net$

---------------------------------

转义符号

如果要匹配 [ ' ^ + | ' 等有特殊符号的字符


可以用 "" 做转义


^1*(2+3)=6$

只能匹配 1*(2+3)=6

---------------------------------

其它

^[a-zA-Z]+$ //由26个字母组成的字符串

^[A-1]+$ //由26个英文字母组成的字符串


^[a-z]+$ //由26个小写字母组成的字符串


^[A-Za-z0-9]+$ //由 数字 26个英文字母 组成的字符串


^\w+$ //由数字 26个英文字母或者下划线组成的字符串


[u4e00-u9fa5] 汉字中的任意一个汉字

原文地址:https://www.cnblogs.com/shaozhu520/p/8545340.html