构造函数
特点:一般函数名是大写开头,就是构造函数。(良好的书写习惯,受人待见。)
this是空对象,然后赋值。
构造函数 - 扩展
- var a = {}其实是 var a = new Object()的语法糖
- var a = []其实是 var a = new Array()的语法糖
- function Foo(){...}其实是 var Foo = new Function(...)
- 使用 instanceof 判断一个函数是否是一个变量的构造函数。
(判断一个变量是否为“数组”:变量 instanceof Array)
原型规则和示例
5条原型规则:原型规则是学习原型链的基础
-
所有引用类型(数组,对象,函数),都具有对象特性,即可自由扩展属性(除了 “null”意外)
-
所有引用类型(数组,对象,函数),都有一个proto(隐式原型)属性,属性值是一个普通的对象
-
所有的函数,都有一个prototype(显示原型)属性,属性值也是一个普通对象
-
所有引用类型(数组,对象,函数),porto属性值指向他的构造函数的'portotype'的属性值
-
this :通过对象属性的形式去执行函数,还是自身的属性,还是从原型中得到的属性,他执行的函数的this,永远指向(对象本身)f自身。
-
for ( in )循环对象自身的属性
原型链
instancof
- f instanceof Foo的逻辑是:
- f 的proto一层一层往上,能否对应到Foo.portotype
- 再试着判断f instanceof Object