对原型的理解
1 原型链
JavaScript 对象有一个指向一个原型对象的链。当试图访问一个对象的属性时,它不仅仅在该对象上搜寻,还会搜寻该对象的原型,以及该对象的原型的原型,依此层层向上搜索,直到找到一个名字匹配的属性或到达原型链的末尾
要理解原型链又得先从instanceof说起。
为什么 f1 instanceof Object 为true呢?如下图所示:
其实instanceof表示的就是原型链的结构或者说是继承关系
2 继承属性
Js中继承其实就是通过原型链来体现的
f1.b是怎么来的呢?
——从Foo.prototype得来,当访问一个对象的属性时,先在基本属性中查找,如果没有,再沿着proto这条链向上找,这就是原型链。
a.prototype 包含了2个属性,一个是constructor ,另外一个是proto
闭包
概念:闭包我的理解就是就是能够读取其他函数内部变量的函数。
有两种存在形式:函数作为返回值时 和 函数作为参数传递时
要理解闭包,首先理解javascript特殊的变量作用域,变量的作用于无非就是两种:全局变量,局部变量。而javascript语言的特殊处就是函数内部可以读取全局变量。
1. 如何从外部读取局部变量?
正常情况下,这是不能读取到的,只有通过闭包方法才能读取到。因此可以把闭包简单理解成“定义在一个函数内部的函数”。所以本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。
2 闭包的用途:闭包可以读取函数内部的变量,可以让变量的值始终保持在内存中。