WEB开发网
开发学院网页设计JavaScript Javascript的构造函数和constructor属性 阅读

Javascript的构造函数和constructor属性

 2010-01-12 00:00:00 来源:WEB开发网   
核心提示: }(), 请注意加注释的那一行,extend如果检测到overrides参数中有constructor属性,Javascript的构造函数和constructor属性(3),也就是说子类试图改写父类的prototype的 constructor的时候,就直接将子类设置为这个函数!这样就达到效果了

}(), 请注意加注释的那一行。extend如果检测到overrides参数中有constructor属性,也就是说子类试图改写父类的prototype的 constructor的时候,就直接将子类设置为这个函数!这样就达到效果了。不过我立刻发现这句检测仅在这个if语句块中,也就是extend的两参数版本中有,那么使用extend的另一个三参数版本这样设置应该是无效的。 写段代码测试下:

<head> 
  <title></title> 
  <script type="text/javascript" src="ext-3.1.0/src/core/core/Ext.js"></script> 
  <script type="text/javascript"> 
    function MyClass() { 
      this.id = 'class'; 
    } 
    function SubClass() { } 
     
//    SubClass=Ext.extend(SubClass, MyClass, { constructor: function() { 
//        this.overrideProperty = 'OK'; 
//      } 
//    }); 
    SubClass = Ext.extend(MyClass, { constructor: function() { 
      this.overrideProperty = 'OK'; 
    } 
    }); 
    var obj = new SubClass(); 
    alert(obj.overrideProperty); 
  </script> 
</head>

两种写法,运行的结果果然是第一种是undefined而第二种是OK。呃,名字相同的函数仅仅是参数写法不同,执行的效果却不相同,这个是有点出乎意料的。而且Extjs的官方文档未对此有任何说明。以后大家还是尽量用两参数版本的吧。

最后顺便再看几个表达式,

Javascript的构造函数和constructor属性

第一个是说函数的prototype的constructor是自己,这个上文已经谈到,没有问题;第二个是说函数也是一个对象,它是 Function构造函数的一个对象,也还好理解;第三个是说Function构造函数本身一个对象,它还是Function构造函数的一个对象;最后一个其实是和第三个等价的,是说Function对象的构造函数是它自己…… 我确实有点想不明白Function是怎么自己构造自己的?鸡生蛋,蛋生鸡?要再追究下去就应该涉及到Javascript语言的具体实现了吧,就此打住。

哎,Javascript这个语言本身还是有点复杂啊。要不是有了XMLHttpObject,让它大红大紫了下,否则它还在黑暗的角落里暗自哭泣呢。

作为应用程序开发人员,或许我们自己写程序的并不会用到这些底层的东西,但是,JS框架中却大量的使用了这些高级特性,而且再详尽的文档也不可能把这些方法的作用、影响一一道来,所以开发人员还是需要尽量理解这些东西,以免死了还不知道怎么回事。上面的Ext.extend函数就是一个例子。

上一页  1 2 3 

Tags:Javascript 构造 函数

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接