当前位置:编程学习 > JAVA >>

JavaScript的写类方式(4)

 

工具函数如下

view sourceprint?01 /** 

02  * $class 写类工具函数之三 

03  * @param {String} className 

04  * @param {Function} superClass 

05  * @param {Function} classImp 

06  */

07 function $class(className, superClass, classImp){ 

08     if(superClass === "") superClass = Object; 

09     var clazz = function(){ 

10         return function(){ 

11             if(typeof this.init == "function"){ 

12                 this.init.apply(this, arguments); 

13             } 

14         }; 

15     }(); 

16     var p = clazz.prototype = new superClass(); 

17     var _super = superClass.prototype; 

18     window[className] = clazz; 

19     classImp.apply(p, [_super]); 

20 }

定义一个Person类

view sourceprint?01 $class(Person, , function(){ 

02     // 构造函数 

03     this.init = function(name){ 

04         this.name = name; 

05     }; 

06     // 方法体 

07     this.getName = function(){ 

08         return this.name; 

09     }; 

10     this.setName = function(name){ 

11         this.name = name; 

12     }; 

13 });

创建对象看看

view sourceprint?1 var p = new Person(Jack); 

2 console.log(p);  

3 console.log(p.constructor == Person); // false      

使用该工具函数写类需注意,this.init方法必不可少。使用过Prototype库的同学会知道Class.create后的initialize方法也是必不可少的。

因为没考虑继承,第二个参数superClass使用空字符串,即默认继承于Object。

从输出为false可看到,这个工具类没有去维护constructor属性。 设计的每一种写类方式都是有取舍的,这完全取决于设计者的意图

补充:web前端 , JavaScript ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,