this使用频率很高,指向问题很重要,合理使用this,可以让我们写出简洁且复用性高的代码
函数里会有一个隐含的参数this,this指向的是一个对象(称为上下文对象)
调用方式不同,this会指向不同的对象
- 函数形式调用,this会指向window
- 方法形式调用,this指向 调用方法的对象
- 总结来说,this指向的是最后调用它的那个对象
function fun(a, b) {
console.log(this); //window
}
fun();// 其实就是window.fun();
var obj = {
name: "小红",
sayName: fun
}
// console.log(obj.ss == fun); //true
obj.sayName();
function fun() {
var = name = "局部";
console.log(this.name);//这里this就可以保证调用者的不同,变成不同的答案,否则如果是name就一直都是“全局”
}
var obj = {
name: "小红",
sayName: fun
}
var obj2 = {
name: "小名",
sayName: fun
}
fun();//全局
obj.sayName();
var obj1 = {
name: "小名",
sayName: function () {
alert(this.name);//小名
}
}
var obj2 = {
name: "小q",
sayName: function () {
alert(this.name);//小q
}
}
var obj3 = {
name: "小t",
sayName: function () {
alert(this.name);//小t
}
}
obj2.sayName();
//以上创建函数重复太多,怎么提高效率呢,可以将大量重复的代码提取出来
使用工厂方法创建对象,通过该方法可以大批量的创建对象
//如下
function creatPerson(name, age, gender) {
//创建一个新的对象
var obj = new Object();
obj.name = name;
obj.age = age;
obj.gender = gender;
obj.sayName = function () {
console.log(this.name);
}
return obj;
}
var obj2 = creatPerson("小明", 12, "女");
var obj3 = creatPerson("小额", 19, "女");
var obj4 = creatPerson("小u", 17, "女");
console.log(obj2, obj3, obj4);