构造函数创建对象
我们先应用构造函数创建一个对象:
- function Person() {
- }
- var person = new Person();
- person.name = 'name';
- console.log(person.name) // name
在这个例子中,Person就是一个构造函数,我们应用new创建了一个实例对象person。
prototype
每个函数都有一个prototype属性,就是我们经常在各类例子中看到的那个prototype,比如:
- function Person() {
- }
- // 固然写在注释里,然则你要留意:
- // prototype是函数才会有的属性
- Person.prototype.name = 'name';
- var person1 = new Person();
- var person2 = new Person();
- console.log(person1.name) // name
- console.log(person2.name) // name
那这个函数的prototype属性到底指向的是什么呢?是这个函数的原型吗?
其实,函数的prototype属性指向了一个对象,这个对象恰是调用该构造函数而创建的实例的原型,也就是这个例子中的person1和person2的原型。
那么什么是原型呢?你可以如许懂得:每一个JavaScript对象(null除外)在创建的时刻就会与之接洽关系另一个对象,这个对象就是我们所说的原型,每一个对象都邑大年夜原型"持续"属性。
让我们用一张图表示构造函数和实例原型之间的关系:

constructor
在这张图中我们用Object.prototype表示实例原型
那么我们该怎么表示实例与实例原型,也就是person和Person.prototype之间的关系呢,这时刻我们就要讲到第二个属性:
__proto__
这是每一个JavaScript对象(除了null)都具有的一个属性,叫__proto__,这个属性会指向该对象的原型。
为了证实这一点,我们可以在火狐或者谷歌中输入:
- function Person() {
- }
- var person = new Person();
- console.log(person.__proto__ === Person.prototype); //true
于是我们更新下关系图:

既然实例对象和构造函数都可以指向原型,那么原型是否有属性指向构造函数或者实例呢?
综上我们已经得出:
指向实例倒是没有,因为一个构造函数可以生成多个实例,然则原型指向构造函数倒是有的,这就要讲到第三个属性:construcotr,每个原型都有一个constructor属性指向接洽关系的构造函数
为了验证这一点,我们可以测验测验:
- function Person() {
- }
- console.log(Person === Person.prototype.constructor); //true
所以再更新下关系图:

- function Person() {
- }
- var person = new Person();
- console.log(person.__proto__ == Person.prototype) // true
推荐阅读
如今不管是娱乐照样工作,都越来越离不开电脑,很多用户都邑将一些重要文件存放在电脑中,如不雅说没有备份的话,极易造成一些文件损掉,那么在这种情况下,我们可以应用Win7体系中的主动>>>详细阅读
本文标题:JavaScript深入之从原型到原型链
地址:http://www.17bianji.com/lsqh/34639.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示