重点:函数的三种调用方式(this关键字)
1、函数三种调用方式:全局函数 对象方法 构造函数
全局函数 : this指向window
对象方法 : this指向对象
构造函数 : this指向new创建的空对象
<script>
/*
1. 函数三种执行方式
a. 全局函数 : fn()
b. 对象方法 : obj.sayHi()
c. 构造函数 : new fn()
2. (重点)this指向 : 谁 ‘调用’ 我,我就指向谁
* 由于函数有三种调用方式,this也有三种指向
a. 全局函数 : this指向window
b. 对象方法 : this指向对象
c. 构造函数 : this指向new创建的空对象
3. 共同特点 : this指向无法修改的,由调用时决定
*/
function fn(){
//修改this指向 : 程序会报错。this无法修改的
// this = {name:'张三'};
console.log(this);
/*请说出下面代码 不同调用方式下的作用
全局函数 : this.a 给window对象添加属性a(声明一个全局变量a)
对象方法 : this.a 给obj对象动态添加属性a
构造函数 : this.a 给f1实例对象添加属性a
*/
this.a = 10;
console.log('111');
};
//1. 全局函数 : 所有的全局变量,全局函数本质都是window的属性
fn();//window.fn()
//2. 对象方法
var obj = {
name:'坤坤',
age:20,
sayHi:function(){
console.log(this);
console.log('大家好,我是ikun');
},
eat:fn
};
obj.sayHi();// this 指向 obj
// this指向 取决于这个函数是如何 ‘调用’ 的,跟声明没有半毛钱关系
obj.eat();// this 指向 obj
//3. 构造函数
//(1)创建空对象 (2)this指向这个对象 (3)完成赋值代码 (4)自动返回对象
var f1 = new fn(); // this 指向 new创建的空对象
console.log(f1);
</script>