js中构造函数的执行顺序

1)在看《web前端修炼之道》中对其中一段代码,一直运行不通

 1 function extend(subClass,superClass){
 2     var F=function(){};
 3     F.prototype=superClass.prototype;
 4     subClass.prototype=new F();
 5     subClass.prototype.constructor=subClass;
 6     subClass.superClass=superClass.prototype;
 7     if(superClass.prototype.constructor==Object.prototype.constructor){
 8         superClass.prototype.constructor=superClass;
 9     }
10 }
11 
12 function Animal(name){
13     this.name=name;
14     this.type='animal';
15 }
16 
17 Animal.prototype={
18     say:function(){
19         alert("I'm a(an)"+this.type+",my name is "+this.name);
20     }
21 }
22 
23 extend(Bird,Animal);
24 
25 function Bird(name){
26     this.constructor.superClass.constructor.apply(this,arguments);
27     this.type='bird';
28 }
29 
30 Bird.prototype.fly=function(){
31     alert('I am flying');
32 }
33 
34 var canary=new Bird('xiaocui');
35 canary.say();
36 canary.fly();

在第26行始终报错,于是开始注意到构造函数的执行顺序问题。

2)下面的例子可以看出构造函数,是优先执行的。

 1 C = function(){
 2 alert("1");
 3 this.a();
 4 alert("2");
 5 }
 6  
 7 C.prototype.a=function(){
 8 alert("3");
 9 //alert(name);
10 alert("4");
11 }

运行结果为:在构造函数C内,从上到下执行,先弹出1,后调用方法a,弹出3,执行完a后,最后弹出2,全部执行完后,返回一个队形,并将对象的引用(地址)赋给c.

3)从《javascript高级程序设计》中可以看到,

  a)自定义的类其实就是定义一个构造函数

     b)同时会通过类的prototype定义类的方法

  c)类的prototype包括两部分:指向构造函数的引用,类的方法

      d)通过构造函数生成的实例,都隐含一个指向类的prototype的引用。

 未完待续。。。

posted @ 2014-03-21 16:35  hugh.wei  阅读(562)  评论(0编辑  收藏  举报