一 this是一个特别的关键字,他自动定义在所有函数的作用域中------->他是在运行(函数被调用)时进行绑定的,隐式的传递一个对象的引用;
1.1 为什么要使用this:
//使用this
function foo(){
return this.name.toUpperCase();
}
var person = {
name: 'jim'
}
console.log(foo.call(person));
//不实用this
function foo(name){
return name.toUpperCase();
}
var person = {
name: 'jim'
}
console.log(foo(person.name));
//对比: 不使用this必须显式的传递上下文对象,使用模式复杂时不易于复用
1.2 绑定规则:
1.2.1 默认绑定---->独立函数调用
//其一:
function foo(){
alert(this);
}
foo(); //window
//其二:
setTimeout(foo,30); //window
1.2.2 隐式绑定---->调用位置上下文对象
function say(){
console.log(this);
}
var person = {
sayName: say
}
person.sayName(); //person
1.2.3 显式绑定---->call()和apply()方法的第一个参数
function say(){
console.log(this.age);
}
var person = {
sayName: say
}
var jim = {
age: 18
}
person.sayName.call(jim); //jim
1.2.4 new绑定---->创建的新对象实例本身
function Person(name){
this.name = name;
}
var jim = new Person('jim');
console.log(jim.name); //'jim'