WEB开发网
开发学院网页设计JavaScript Javascript的构造函数和constructor属性 阅读

Javascript的构造函数和constructor属性

 2010-01-12 00:00:00 来源:WEB开发网   
核心提示:我们知道,默认情况下,Javascript的构造函数和constructor属性,对一个函数前面使用new,可以构造出一个对象,从而子类的prototype的 constructor是父类的构造函数,这就造成了子类的每个对象的构造函数都是父类的构造函数,每一个对象都有一个constructor属性,这个construc

我们知道,默认情况下,对一个函数前面使用new,可以构造出一个对象。每一个对象都有一个constructor属性,这个constructor属性指向构造出该对象的函数。例如,在Chrome下调试如下程序,很清楚的展示了这点:

Javascript的构造函数和constructor属性 

然而事情并不是这么简单。再看下面的代码:

Javascript的构造函数和constructor属性

很显然,这个时候obj的constructor已经不再是创建它的函数,注意到obj.name也是undefined,因此修改构造函数的prototype的contructor并不会影响构造函数所产生的对象。真正的原因是:

一个对象的constructor是它的构造函数的prototype.constructor,而每一个函数都有一个prototype,默认情况下,这个prototype有一个constructor属性,指向的是它自己。

我觉得Javascript的设计本意是让每个对象的constructor都指向自己的构造函数,然而有像上面的例子可以破坏这一点。另外,这样的设计其实也不很完美,一个很大的问题就是在继承的时候必须小心的维护constructor的指向。在最简单的继承中,可以把子类的构造函数的 prototype设置为父类的一个实例,而父类的实例的constructor是父类的构造函数,从而子类的prototype的 constructor是父类的构造函数,这就造成了子类的每个对象的构造函数都是父类的构造函数。这是很容易引起困惑的。

1 2 3  下一页

Tags:Javascript 构造 函数

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接