普通函数:
1.绑定方式:默认绑定(默认全局),(对象中的)隐式绑定,硬绑定(apply/call/bind),构造函数绑定
2.this的指向主要看被谁调用,是动态的
3.改变this的指向,apply/bind/call
箭头函数:
1.和普通函数相比,箭头函数不能使用argument、super和new.target,也不能用作构造函数,没有
prototype属性
2.this指向一般是全局对象,或者是指向包含该箭头函数的上一层普通函数(在普通函数中可能会出现
因为使用回调函数比如定时器,而丢失this指向全局的情况,这时候使用箭头函数回调就会避免丢失
this)
console.log(Fun.prototype == obj.__proto__) // true
3
// obj.a ='xxx'> function Fun(){this.a='xxx'}> obj.__proto__.a='xxx'>
Fun.prototype.a='xxx'> Object.prototype.a='xxx'
4
考题一:
1
function Foo(){
2
getName = function(){console.log(1)} //注意是全局的window.
3
return this;
4
}
5
6
Foo.getName = function(){console.log(2)}
7
Foo.prototype.getName = function(){console.log(3)}
8
var getName = function(){console.log(4)}
9
function getName(){
10
console.log(5)
11
}
12
13
Foo.getName(); //2
14
getName(); //4
15
Foo().getName(); //1
16
getName(); //1
17
new Foo().getName();//3
18
考题二:
19
window.name = 'ByteDance';
20
function A(){
21
this.name = 123;
22
}
23