目录
this
解析器在调用函数,每次都会函数内部传递进一个隐含的参数,每个隐含的参数就是this,this 指向的是一个对象,这个对象我们称为函数执行的上下文对象。
根据函数的调用方式的不同,this 会指向不同的对象
- 以函数的形式调用时,this永远都是window
- 以方法的形式调用时,this就是调用方法的那个对象
function fun(){
console.log(this.name);
}
//创建一个对象
var obj={
name:"孙悟空";
sayName:fun
};
var obj2={
name:"沙和尚",
sayName:fun
};
//fun();//调用函数--window
//obj.sayName();//调用方法---obj
//console.log(obj.sayName==fun);
var name="全局的name属性";
fun();//以函数的形式调用,this是window
obj.sayName();//以方法的形式调用,this是obj
补充
var name="全局";
function fun(){
console.log(this.name);
}
var obj={
name:"孙悟空",
sayName:fun
};
var obj2={
name:"沙和尚",
sayName:fun
};
obj.sayName();
//obj2.sayName();
使用工厂方法创建对象
通过该方法可以大批量的创建对象
function creatPerson(){
//创建一个对象
var obj=new Object();
//向对象中添加属性
obj.name=name;
obj.age=age;
obj.gander=gender;
obj.sayName=function(){
alert(this.name);
};
return obj;
}
var obj2=createPerson("猪八戒",28,"男");
console.log(obj2);
obj2.sayName();
构造函数
- 创建方式和普通函数没有区别,不同的是构造函数习惯上首字母大写
- 与普通函数的区别就是调用方式的不同,普通韩叔叔直接调用,构造函数需要使用new 关键字来调用
执行流程
- 立刻创建一个对象
- 将新建的对象设置为函数中this
- 逐行执行函数中的代码
- 将新建的对象作为返回值返回
使用同一个构造函数创建的对象,我们称为一类对象
function Person(name,age,gender){
this.name=name;
this.age=age;
this.gender=gender;
this.sayName=functionn(){
alert(this.name);
}
}
var per=new Person("孙悟空",18,"男");
console.log(per);
console.log(per instanceof Person);//true
console.log(dog instanceof Person);//false
console.log(dog instanceof Person);//true
instanceof
使用instanceof可以检查一个对象是否满足一个类的实例
语法
对象 instanceof 构造函数
如果是,返回true ,否则返回false
注意:所以的对象都是Object的子代,所以instanceof 后面写Object都是true