constructor指的就是对象的构造函数.
function Fn(){
var a = 1;
}
var foo = new Fn();
console.log(foo.constructor);
从这个例子中,我们可以很清楚地看到foo的构造函数是Fn,即foo.constructor === Fn()
.
函数也是对象,也应该是有构造函数的,那么函数的构造函数又是什么呢?
console.log(Fn.constructor);
Function()
函数也是被创建出来的,由Function创建,Function是自己所创建的,所以Function的构造函数时它自己。
每个构造函数都有一个原型对象,这个原型对象有一个指针是指向这个构造函数的,而实例的原型包含一个指向构造函数的原型对象的指针。
还是第一个例子,从图中我们可以更好的去了解
顺着这条红色的线,找到constructor,就是Fn原型的构造函数同时也是foo的构造函数。
foo.constructor === Fn();
Fn.prototype.constructor === Fn();
举一个复杂一点点的例子
// 构造函数
function Foo(y){
// 构造函数将会以特定模式创建对象:被创建的对象都会有"y"属性
this.y = y;
}
// "Foo.prototype"存放了新建对象的原型引用
// 所以我们可以将之用于定义继承和共享属性或方法
//继承属性x
Foo.prototype.x = 10;
//继承方法calculate
Foo.prototype.calculate = function(z){
return this.x + this.y + z;
}
//使用foo模式创建b和c
var b = new Foo(20);
var c = new Foo(30);
//调用继承的方法
b.calculate(30);
c.calculate(40);
console.log(
b.__proto__ === Foo.prototype, //true
c.__proto__ === Foo.prototype,//true
// "Foo.prototype"自动创建了一个特殊的属性"constructor"指向Foo本身
b.constructor === Foo,//true
c.constructor === Foo,//true
Foo.prototype.constructor === Foo,//true
b.calculate === b.__proto__.calculate,//true
b.__proto__.calculate === Foo.prototype.calculate//true
);
下图可以清楚地反映出