this 关键字 函数的拥有者
1、函数中引用
var x = 0
function func() {
this.x; // this指向window 打印出x为0
this.x = 1; // this指向函数 打印出x为1
}
function func2() {
this.x = 2;
}
func2()
func()
console.log(x) // 1
2、对象调用
var o ={};
o.a = 1;
o.action = function() {
return this.a // this指向当前对象
};
console.log(o.action()) // 1
// 对象中调用外部函数
function func() {
return this.a //this指向函数的调用者,也就是o
}
var o ={};
o.a = 1;
o.action = func; // func()调用函数,这里要使用func
console.log(o.action()) // 1
3、构造函数调用
// this指这个实例化新对象
function Fun(name,age) {
this.name = name
this.age = age
}
var fun = new Fun('tina',22)
var fun2 = new Fun('luck',22) // this指这个实例化新对象
console.log(fun.name) // tina
console.log(fun2.name) // luck
4、this指向
// 改变this指向 call(this,name,color) apply(this,[]) (在一个对象中调用另一个对象)
// 区别:this都是指向当前作用域,区别是传参不一样,apply传的是一个数组
var a = '111';
function func() {
return this.a
}
var o ={};
o.a = 1;
o.action = func;
console.log(o.action()) // 1 this指向对象
console.log(o.action.call()) // 111 call为空时,this指向的是window
this 指向面試題案例:
var number = 1;
var obj = {
number:2,
showNumber:function(){
this.number = 3;
(function() {
console.log('函數自調用',this.number) // 1
// console.log('函數自調用',this) //window
})();
console.log(this.number); // 3
}
}
obj.showNumber()
this 指向案例
var b=1;
var ob={
b:2,
f:function(){
this.b=3;
(function(){
console.log(this);//window
console.log(this.b);//1
})();
console.log(this);//object
console.log(this.b);//3
console.log(obj.b);//3
}
}
console.log(obj.b);//2
obj.f(); //window 1 obj 3 3
console.log(obj.b);//3
正则表达式简单写法
// 正则表达式写法
var filter = /^[a-z]at$/;
var filter2 = new RegExp('^[a-z]at$');
var str = 'abc'
if(filter2.test(str)) {
console.log('ok')
}else{
console.log('err')
}
// 整数或保留两位小数
var ValidNumPoint=/(^(-)?[0-9]*$)|(^(-)?[0-9]+([.]{1}[0-9]{1,2})$)/;
var sVal = "50.23"
if(ValidNumPoint.test(sVal)){
console.log("true");
}else{
console.log("false");
}