function
在ECMAScript规范中,function也是对象的一种,也就是说函数也是对象,也有自己的隐式引用(原型)
构造函数
如图person1、person2都是
Person的实例,这两个实例都有一个constructor(构造函数)属性,该属性指向Person,在控制台输出,我们可以看到
由此,我们得出一个结论实例的
constructor属性指向构造函数。
原型对象
在JavaScript中,每当我们定义一个对象包括函数,对象中都会包含一些预定义的属性。其中每个函数都有一个prototype属性(此属性函数对象才有,普通对象没有该属性,函数对象、对象共有的属性是__proto__),这个属性指向函数原型对象。
我们看看实际的输出效果
什么是原型对象?
原型对象概念:穿件的每一个函数,解析器都会向函数中添加一个属性prototype,这个属性是一个对象,这个对象就是原型对象。如果函数作为普通函数调用时,prototype属性没有任何作用。但是,当函数以构造函数(new Fun())调用时,它所创建的对象都会有一个隐含的属性__proto__,指向该构造函数的原型对象。
从前面的例子来说就是,pserson1.__proto__ === Pserson.prototype,简略示意图,如下
原型对象相当于一个公共区域,所有同一个类的实例都可以访问这个原型对象。可以将对象中共有的内容,统一设置到原型对象中。
constructor
在JavaScript中,constructor属性是专门为function而设计的。它存在于每一个function的prototype属性中,作用就是保存一个指向function的引用。
光看文字可能有些空洞,我们可以把上面的代码,在控制台输出看一下,如图