常见概念
构造函数
构造函数-扩展
原型规则和示例
原型链
instanceof
构造函数
任何一个函数都可以被new,new了之后,就成了构造方法。
如下:
1 | function Foo(name, age) { |
与普通函数相比,构造函数有以下明显特点:
用new关键字调用。
不需要用return显式返回值的,默认会返回this,也就是新的实例对象。
建议函数名的首字母大写,与普通函数区分开。
参考链接:
当new之后,this会先变成一个空对象,然后通过this.name = name来赋值。
构造函数的扩展

上图中发现,数组、对象、函数也有构造函数,它们的构造函数是Array、Object、funtion。实际开发中,都推荐前面的书写方式。
原型规则
原型规则是学习原型链的基础。原型规则有五条,下面来讲解。
规则1
所有的引用类型(数组、对象、函数),都具有对象特性,都可以自由扩展属性。null除外。
举例:

规则2
所有的引用类型(数组、对象、函数),都有一个_proto_属性,属性值是一个普通的对象。_proto_的含义是隐式原型。

其实,规则2是规则1的特例,只不过,js语法帮我们自动加了 规则2。
规则三
所有的函数(不包括数组、对象),都有一个prototype属性,属性值是一个普通的对象。prototype的含义是显式原型。(实例没有这个属性)

规则四
所有的引用类型(数组、对象、函数),_proto_属性指向它的构造函数的prototype值。

总结:以上四条,要先理解清楚,然后再来看下面的第五条。