javascript 继承、子类化
javascript实现面向对象时,并没有类似于java、c++的严格的类层次结构。所以想实现继承,也不能通过extend等方式实现。不过javascript提供的原型链表机制可以很好的完成这一工作,实现继承机制。
继承的思想宽松点说就是子类继承父类的属性和方法,并且隐藏父类的同名属性或方法。在javascript中实现该机制并不难,只不过比较粗糙一点,看下面的例子。
1: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2: <html xmlns="http://www.w3.org/1999/xhtml">
3: <head>
4: <title>javascript子类化</title>
5: <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
6: <meta name="generator" content="Ntcsoft" />
7: <meta name="author" content="MrZhou" />
8: <meta name="keywords" content="" />
9: <meta name="description" content="" />
10: </head>
11:
12: <body>
13:
14: <script type="text/javascript">
15: //父类构造函数
16: function fa (){
17: var privateFs = "private father String";//私有成员
18:
19: this.getPrivateFs = function(){ //私有成员的get方法
20: return privateFs;
21: }
22: this.setPrivateFs = function( str ){//私有成员的set方法
23: privateFs = str;
24: }
25:
26: this.fs = 'father string';
27: this.ff=function(){
28: alert('father function');
29: }
30: }
31: //子类构造函数
32: function son(){
33: this.ss = 'son string';
34: this.sf = function(){
35: alert('son function');
36: }
37: }
38: //实现子类继承父类,这里实际上是让构造函数son的原型对象指向fa函数的实例,这样,son的prototype属性就拥有了fa实例对象的所有属性和方法,
而son的实例会同时拥有son和fa类的this指定的属性和方法。
39: son.prototype = new fa();
40:
41: //通过子类构造函数生成实例对象。
42: var newBoy = new son();
43: //alert(newBoy.fs);//father string
44: //alert(newBoy.ss)//son string
45:
46: /*(这时候弹出的是fa函数的内容而不是son函数的内容)
47: 不过这样做有几个缺点:这样做实际上是干掉了son的prototype,随之也干掉了son的prototype对象的constructor属性。不过我们也有解决办法。*/
48: //alert(son.prototype.constructor)
49:
50: //son.prototype.constructor = son;
51: //alert(son.prototype.constructor);
52:
53: //通过get,set方法读写父类的私有属性
54: newBoy.setPrivateFs("123");
55: alert(newBoy.getPrivateFs());
56: </script>
57:
58: </body>
59: </html>