你的位置:首页 > Java教程

[Java教程]javascript的constructor简单介绍


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/