this指向
1.分析this指向
函数中this指向,情况如下:
- 构造函数内部的this指向新创建的对象。
- 直接通过函数名调用函数时,this指向的是全局对象window。
- 如果将函数作为对象的方法调用,this将会指向该对象。
function Person(name){
this.name = name;
}
var p1 = new Person("张三");
function foo(){
return this;
}
var o = {
name:"刘备",
func:foo
}
foo() //foo函数的this指向全局对象window
console.log(foo() === Window); //结果为true
console.log(o.func()); //将foo函数作为对象o的函数进行调用,此时,foo函数中的this指向o
console.log(o.func() === o); //结果为true
2.更改this指向
(1)apply()方法和call()方法
function method(){
console.log(this.name); //this指向全局对象window
}
//更改了method方法中this的指向:此时this指向对象{name:"张三"}
method.apply({name:"张三"})
method.call({name:"李四"})
(2)apply()方法和call()方法的区别
function method(a,b){
console.log(a + b);
}
method.apply({},["1","2"]) //结果为12
method.apply({},[1,2]) //结果为3
//说明apply()是以数组的方式传参
method.call({},1,2) //结果为3
//method()是以参数的方式传参
(3)bind()方法
bind()方法:实现提前绑定的效果。在绑定时,还可以提前传入调用函数时的参数。
function method(a,b){
console.log(this.name + a + b);
}
var name = "诸葛亮"; //全局变量,属于window
//将{name:"赵云"}对象绑定到method上,此时method方法中的this指向"赵云"
var test = method.bind({name:"赵云"},"3","4");
method("1","2"); //全局调用,函数中的this指向window
test(); //输出结果为 赵云34
JavaScript的错误处理
1.如何进行错误处理
var o = {};
try {// 在try中编写可能出现错误的代码
o.func();
console.log('a');// 如果前面的代码出错,这行代码不会执行
} catch(e) {// 在catch中捕获错误,e表示错误对象
console.log(e);
}
console.log('b'); // 如果错误已经被处理,这行代码会执行
2.抛出错误对象
try {
var e1 = new Error("错误信息");
throw e1; //将错误对象e1抛出
} catch (error) {
console.log(error.message);
console.log(error === e1);
}