javascript的constructor简单介绍:
constructor可以返回对象对创建它的构造函数的引用,例如:
var arr=[1,2,3]; console.log(arr.constructor===Array);
以上代码中的输出值是true,这说明数组对象arr的constructor属性指向它的构造函数Array。
可能上面的代码过于简单了,下面再来一点稍稍复杂的代码分析一下:
Object.prototype.webName="蚂蚁部落"; function show(){ this.name="show函数name"; } show.prototype={ constructor:show, name:"show的原型对象的name", msg:function(){return this.name + this.webName} } var prototypeObj=show.prototype; console.log(prototypeObj.msg()); var obj=new prototypeObj.constructor; console.log(obj.name); var showObj=new show(); console.log(showObj.msg());
下面对以上代码进行一下注释:
1.Object.prototype.webName="蚂蚁部落"为Object的原型对象添加一个名为webName的属性,属性值为:蚂蚁部落。
2.function show(){this.name="show函数name"},创建一个函数,当次函数用作构造函数的时候,this就只想通过构造函数创建的对象对象实例,那么此对象实例的name属性值为:show函数name。
3.show.prototype={},将show的原型对象设置为后面的对象直接量。
4.constructor:show,将原型对象的constructor属性指向show函数。
5.name:"show的原型对象的name",属性和属性值,这个很简单就不用数了。
6.msg:function(){return this.name + this.webName},和上面一个道理,只不过是函数而已。
7.var prototypeObj=show.prototype,将show函数的原型对象的引用赋值给变量prototypeObj。
8.console.log(prototypeObj.msg()),因为prototypeObj是show的原型对象的引用,那么将会输出:show的原型对象的name蚂蚁部落,在msg,第一个this是指向原型的对象实例,第二个this也是,不过在原型对象中没有webName属性,那么将会通过原型链找到Object的原型的webName属性。
9.var obj=new prototypeObj.constructor,prototypeObj是指向show的原型对象的,也就是那个对象直接量,此对象直接量的constructor属性是指向show函数的,所以这里就是创建了一个show的对象实例。
10.console.log(obj.name),所以将会输出show函数name。
11.var showObj=new show(),创建一个show的对象实例。
12.console.log(showObj.msg()),msg函数中的this是指向show的对象实例,尽管在原型对象中也有name属性,但是对象本身的优先级要高,第二个this自然也是指向show的对象实例,依然通过原型链找到:蚂蚁部落,所以输出结果为:show函数name蚂蚁部落。
原文地址是:http://www.softwhy.com/forum.php?mod=viewthread&tid=9185
更多内容可以参阅:http://www.softwhy.com/javascript/