js创建一个构造函数,会默认在原型链上添加一个constructor的属性,它保存了构造函数内的代码。
一般情况下我们不需要去改动它,但是有些时候我们会不经意的改写它。
比如下面这个例子:
var Fn = function(){ }; Fn.prototype = { a:function(){ } };
原型链是赋值操作而不是添加属性,所以把默认的constructor属性覆盖掉了,我们可以这样解决:
var Fn = function(){ }; Fn.prototype.a = function(){ };
或者:
var Fn = function(){ }; Fn.prototype.a = { constructor:Fn, a:function(){ } };
还有一种情况就是在做类式继承的时候也容易把constructor覆盖掉,比如:
var Base = function(){ }; var Aaa = function(){ }; Aaa.prototype = new Base();
修复constructor只需添加一句代码:
Aaa.prototype.constructor = Aaa;