参考 http://www.cnblogs.com/yupeng/archive/2012/04/06/2435386.html
function a(c){ this.b = c; this.d =function(){ alert(this.b); } } var obj = new a('test'); console.log(obj.constructor);//a的function console.log(a);
结果都是
function a(c){ this.b = c; this.d =function(){ alert(this.b); } }
function 里面包含了
prototype 包含了2个属性,一个是constructor ,另外一个是__proto__
一个实例化的对象他的__proto__指向的是原始对象的prototype,所以constructor也过来了。
obj.constructor===a 是true,obj instanceof a 也是true。如下面所示。
可以这么说因为 obj.constructor===a 所以 obj instanceof a
a {b: "test", d: function} b: "test" d: function (){ __proto__: a constructor: function a(c){ __proto__: Object
总结下,一个实例化的对象的constructor === 它的没有实例化的对象。
在arale源码里面调用父类方法,如下,他用到了constructor,this应该是实例化后的对象。this总是指向调用方法的对象,作为方法调用,那么this就是指实例化的对象。
// The created class constructor 创建一个类的构造函数 function SubClass() { // Call the parent constructor. parent.apply(this, arguments) // Only call initialize in self constructor. if (this.constructor === SubClass && this.initialize) { this.initialize.apply(this, arguments) } }
参考下:http://www.2cto.com/kf/201407/313470.html