文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>理解Javascript_理解constructor实现原理

理解Javascript_理解constructor实现原理

时间:2010-10-16  来源:笨蛋的座右铭

constructor是什么

简单的理解,constructor指的就是对象的构造函数。请看如下示例:

function Foo(){};
var foo = new Foo();
alert(foo.constructor);//Foo
alert(Foo.constructor);//Function
alert(Object.constructor);//Function
alert(Function.constructor);//Function

对于foo.constructor为Foo,我想应该很好理解,因为foo的构造函数为Foo。对于Foo、Object、Function的构造函数为Function,我想也没什么好争议的。(因为Foo,Object,Function都是函数对象,又因为所有的函数对象都是Function这个函数对象构造出来,所以它们的constructor为Function,详细请参考《js_函数对象》)

 

Prototype与Constructor的关系

function Dog(){}
alert(Dog === Dog.prototype.constructor);//true

在 JavaScript 中,每个函数都有名为“prototype”的属性,用于引用原型对象。此原型对象又有名为“constructor”的属性,它反过来引用函数本身。这是一种循环引用,如图:

 

constructor属性来自何方

我们来看一下Function构造Object的构造过程:

注:Function构造任何函数对象的过程都是一样的,所以说不管是Object,String,Number等内置对象,还是用户自定义对象,其构造过程都和上图一样。这里Object只是一个代表而矣!

图中可以看出constructor是Function在创建函数对象时产生的,也正如'prototype与constructor的关系'中讲的那样,constructor是函数对象prototype链中的一个属性。即Object === Object.prototype.constructor。

 

constructor探究

function Animal(){}

function Person(){}

var person = new Person();
alert(person.constructor); //Person

根据上一节的内容,你能正确的理解这段代码的结果吗?思考后,看一下其内存表示:

这张图明确有表明了Function构造Animal和Person的过程。同时也显示了实例person与Person的关系。

 

再深入一点,代码如下:

function Animal(){}
function Person(){}

Person.prototype = new Animal();

var person = new Person();
alert(person.constructor); //Animal

这个时候,person的构造函数成了Animal,怎么解释?

注:图中的虚线表示Person默认的prototype指向(只作参考的作用)。但是我们将Person.prototype指向了new Animal。

此时,Person的prototype指向的是Animal的实例,所以person的constructor为Animal这个构造函数。

 

结论:constructor的原理非常简单,就是在对象的原型链上寻找constructor属性。

 

注:如果你无法正确理解本文内容,请回顾前面章节的内容。

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载