原型和必包
原型
每一个函数,不管是构造函数,还是普通函数,都有一个 prototype 属性,这个属性就是原型对象,但是普通函数的 prototype 没有任何意义. 当函数以构造函数执行的时候,所创建的对象中有一个隐含的属性proto,这个属性指向原型对象prototype
闭包
产生闭包的条件
- 函数嵌套
- 内部函数引用了外部函数的变量
function f1() {
var a = 5;
var b = "abc";
function f2() {
console.log(a);
}
}
f1();
// 这样就产生了闭包,只要执行函数定义就产生了闭包(f2不必执行,但是必须必须引用了外部函数的变量)
作用域链之所以能够向上级作用域链查找,就是因为存在闭包
in 和 hasOwnProperty
in 会检测原型链
每一个对象都有hasOwnProperty方法,用来检测自己是否包含某个属性
instanceOf 和 constructor
两个检测引用类型的方法
var ary = []
ary instanceOf Array // true
ary.constructor === Array // true