JavaScript this
解析器在调用函数每次都会向函数内部传递一个隐含的参数
这个隐含的参数就是this,this指向的是一个对象,
这个对象我们称为函数执行的上下文对象,
根据函数调用方式不同,this会指向不同的对象
总结this:
1.以函数的形式调用时,this永远都是window
2.以方法的形式调用是,this就是调用方法的那个对象
var name=“全部作用域中的变量name”;
function fun(){
console.log(this.name);
}
var obja={
name:“zhangsan”,
sayWord:fun
};
var objb={
name:“wangwu”,
sayWord:fun
};
fun();
//我们希望,调用fun方法的时候,他可以输出,对象的name属性
obja.sayWord();
objb.sayWord();
使用工厂方法创建对象
通过该方法可以大批量的创建对象 :
function creatPerson(name,age,gengder){
var obj=new Object();
obj.name=name;
obj.age=age;
obj.gender=gengder;
obj.sayhello=function(){
console.log("大家好!我是"+this.name);
}
return obj;
}
var person1=creatPerson("小蓝",23,"女");
var person2=creatPerson("小绿",20,"女");
console.log(person1);
person1.sayhello();
console.log(person2);
person2.sayhello();
console.log(typeof person1);
function createCat(name,age){
var obj=new Object();
obj.name=name;
obj.age=age;
obj.sayhello=function(){
console.log("主人您好啊!我是"+this.name);
}
return obj;
}
使用工厂方法创建的对象,使用的构造函数都是Object
所以创建的对象都是Object这个类型
就导致我们无法区分出多种不同类型的对象
var cat1=createCat("小淘",4);
var cat2=createCat("小白",2);
console.log(cat1);
console.log(cat2);
cat2.sayhello();
console.log(typeof person1);
console.log(typeof cat1);
使用instanceof 可以检查一个对象是否是一个类的实例
语法:对象 instanceof 构造函数
如果是实例,则返回true,否则返回false
对this的情况进行总结:
1.当以函数的形式调用时,this就是window对象
2.当以方法的形式调用时,this就是调用方法的这个对象
3.当以构造函数的形式调用时,this就是新创建的对象