JavaScript原型与原型链

构造函数

说到prototype不得不提下构造函数constructor

1
2
3
4
5
6
7
function Foo(name,age){  //在定义构造函数时,函数要以大写字母开头。以方便维护,修改。
this.name = name;
this.age = age;
//return this; //默认会有这一行
}
var f = new Foo('xiaoming',21);
//var f1 = new Foo('xiaohong',20) //可以同时创建多个对象

constructor

扩展

var a={}其实就是var a = new Object的语法糖 //语法糖:简易写法

var a=[]其实就是var a = new Array的语法糖

function Foo(){…} 其实就是 var Foo = new Function(…)

使用 instanceof 可以判断一个函数是否是一个变量的构造函数
变量名 instanceof Array

prototype原型对象

所有的引用类型(数组,对象,函数),都有个_proto_属性,属性值是普通的对象,叫做隐式原型对象。

所有函数中都会有个默认的prototype属性,实际上他还是一个对象,如果被用在继承中,叫做显示原型对象。

如图,所有的引用类型(数组,对象,函数),_proto_的属性都指向它的构造函数的prototype属性值。

当试图得到对象的某个属性时,如果对象本身没有的这个属性。那么就会去他的_proto_属性中寻找(即prototype属性)。
如图本身是没有定义toString的。却在f._proto_._proto_找到了。

原型链