js this/原型/pro(222)

今天看一代码把以前的知识又忘了,现专门记下笔记

this

this的上下文环境永远在被调用函数的上下文环境

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var someuser = {
name: 'byvoid',
func: function() {
console.log(this.name);
}
};
var foo = {
name: 'foobar'
};
someuser.func(); // 输出 byvoid (被调用函数func的上下文是someuser)
foo.func = someuser.func;
foo.func(); // 输出 foobar (被调用函数func的上下文是foo)
name = 'global';
func = someuser.func;
func(); // 输出 global (被调用函数fuc的上下文是全局)

箭头函数的this

lamda不同,它是在哪被定义,this的上下文就是被定义的地方
就算是嵌套箭头,也没有this上下文,默认最外层的上下文

由于没有自己的this,所以bind call等函数也无效

原型

js对象分俩种:普通对象和函数对象
函数对象: 函数的定义,匿名函数的赋值
普通对象:数组,结构体,new function()

一个函数对象可以访问到prototype __proto__
普通对象只能访问到__proto__

__proto__指向构造函数的prototype,这形成了原型链(也是es5的继承,属性的访问当prototype没有就会通过__proto__去上级寻找)
所以函数对象的__proto__指向的是原型的prototype

prototype的来源: 1.原型的继承 2.自定义的赋值

// //