this -- >总是指向一个对象
this之所以指向不同的对象总的来说是因为函数的调用方式方式不同。
this之所以指向不同的对象总的来说是因为函数的调用方式方式不同。
1 作为对象的方法来调用 this--->当前的对象
var obj = {
name:"默认",
showName:function(){
console.log(this.name);//打印---->'默认'
}
}
obj.showName();
2 作为普通的函数调用 this--->window 指向全局
<script>
function demoTest(){
console.log(this);//打印---->window
}
demoTest();
</script>
3 作为构造函数和new使用 this--->构造函数内部新创建的对象
<script>
function Dog(name){
// 当构造函数用new来实例化时,此构造函数内部会生成一个对象,并让this指向这个对象
this.name = name;
console.log(this.name);//打印这个对象的name属性---->阿黄
}
var dog = new Dog("阿黄");
</script>
4 被call或者是apply调用(函数上下文调用) this--->第一个参数,这两个方法是Function的原型对象上面的方法,他们的作用是一样的,都可以用来借用其他对象的方法
参数:第一个参数是真正调用该方法的对象(函数内部的this绑定的对象,即this会指向这个对象)
后面的参数:call:参数列表 apply:数组
对象.方法.call(调用方法的真正的对象,参数1,参数2,参数3);
对象.方法.apply(调用方法的真正的对象,[参数1,参数2,参数3...])
<script>
var demo01 = {
name:"小偷",
showName:function(param1,param2){
console.log(this.name,param1,param2);
}
}
var demo02 = {
name:"我是老实人"
}
demo01.showName("小贼","毛贼");
// 以下修改内部this指向为真正的调用对象demo02
demo01.showName.call(demo02,"江洋大盗","采花大盗");
demo01.showName.apply(demo02,["山贼","土匪"]);
</script>