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就是新创建的对象