本站首页    管理页面    写新日志    退出


«August 2025»
12
3456789
10111213141516
17181920212223
24252627282930
31


公告
 本博客在此声明所有文章均为转摘,只做资料收集使用。

我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:
日志总数:1304
评论数量:2242
留言数量:5
访问次数:7590158
建立时间:2006年5月29日




[Javascript]javascript 基于原型的知识--如何实现继承
软件技术

lhwork 发表于 2006/11/27 16:37:30

   javascript 是一种基于原型的语言,没有显示的继承符号,它有2种隐式的方式可以实现面向对象中的继承:   1 .   在子类中显示的调用父类的构造函数.          例子:              function  parent ()             {                    this.first = parentFirst;                    this.second = parentSecond;               }              function child()              {                     this.inherrit = parent;                     this.inherrit();                     this.second = childSecond;            }              function parentFirst()           {                  alert(" parent First method call !");            }           function parentSecond()            {                  alert(" parent second method call !");            }            function childFirst()            {                  alert("child first method call !");            }            function childSecond()            {                  alert("child second method call !");            }            function  printClass()            {                  var newObj = new child();                  newObj.first();                  newObj.second();            }            printClass();             发现最后打印出来结果是 parent first method call !   child second method    call !          我们可以看到,first 和second 方法最先在parent类中定义,在child类中 second方法又被重载了.child类的构造函数的前2行的作用就是做了一个简单的原始继承操作.先 把parent的原型赋给child的inherrit方法,执行完parent的构造函数后parent的属性就全在child的属性列表里了.因为 child中是用this来调用parent的构造函数的,javascript解释器会把parent中的this,child中的this 理解成一个作用域下的this,所以就产生了继承效果.  2.   继承的第二种方式:  prototype方式.        把父类对象赋给 子类的prototype属性.        把我们的子类改一下:        function child()        {                     this.second = childSecond;         }         加入   child.prototype = new parent;这一行语句,执行,发现和第一种方式得到同样的结果.        用prototype 方式继承比调用构造函数方式更灵活.用prototype方式可以实现动态继承,比如你用prototype方式给父类动态增加一个属性或者方法,那么子类自动就会获得这个属性或者方法.             在javascript中你可以随意的给对象增加属性或者方法,但是当你给一个实例化的对象增加属性的时候,这个增加的属性只属于这个实例,例如:   var newClass = new subClass();  newClass.addprop = "新增属性";如果想为该类的所有实例都增加一个属性或者方法,要用prototype,  例子   var newClass = new child();  child.prototype.addprop = "新增属性";  这样newClass里就会有addprop这个属性了.这 也是我们给javascript内部对象增加属性或者方法的方式,比如 String.prototype.toString={return "aaa";},不过javascript的内部对象的prototype属性都是只读的,所以只能增加内部对象的属性,不能修改.      突然感觉倒 prototype,用处原来如此之多,上边写的不过是其中一小步分啊.


阅读全文(4211) | 回复(0) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.324 second(s), page refreshed 144770061 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号