<script>
'use strict';
let obj1 = {
name: 'JAY',
fn: function () {
console.log(this);
console.log(this.name);//输出的就是指向的那个对象的属性
}
}
//1.call()
obj1.fn(); //obj1
obj1.fn.call(window);
obj1.fn.call(new Date());
let obj2 = {
name: 'SE'
}
obj1.fn.call(obj2);
//2.apply()
obj1.fn.apply(obj2);
obj1.fn.bind(obj2)();
// 区别:
// 1. call.apply都是自动执行函数的,bind方法只是返回一个函数,不会执行这个函数,想执行加个()就行
// 2. 传参的形式不同
let obj3 = {
name: 'JAY',
fn: function (age,sex) {
console.log(this.name+`今年${age}岁。性别${sex}`);
}
};
let obj4={
name:'QAN'
};
//call bind直接写
obj3.fn.call(obj4,38,'女')
obj3.fn.bind(obj4, 38, '女')()
obj3.fn.apply(obj4, [38, '女'])
//apply参数是以数组形式传进去的
// 箭头函数没有this,是不能改变他的this的
</script>