js中的constructor 和prototype

时间:2022-04-22 18:38:08

参考 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 里面包含了

    1. arguments: null
    2. caller: null
    3. length: 0
    4. name: ""
    5. prototype: Object
    6. __proto__: function Empty() {}
    7. <function scope>
  1. __proto__:

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