浏览 2577 次
锁定老帖子 主题:关于prototype和this关系的疑问
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-10-26
引用 <script type="text/javascript"> var Validation =Class.create(); Validation.prototype={ initialize:function(param) { this.param = param; }, validate1:function(){ alert(this.param+"验证"); } } Object.extend(Validation,{ validate1:function(param){alert(param+"验证");}} ) var temp = new Validation("张硕"); temp.validate1(); temp.validate1("验证"); </script> 问题: 1.在this.param = param;这句中,为什么改成this.name=param就不行呢? 2.我想重载validate1方法,提供一个参数,怎么不行,是不是写错了? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-10-26
补充:需要引入prototype.js
|
|
返回顶楼 | |
发表时间:2007-10-26
首先Class.create返回的是一个function不是c++ java里面什么class不能Object.extend那样,要extend也要Object.extend(Validation.prototype,{....});
其次你想修改this.name=param可是你获取还是this.param当然出不来了,js没有重载,哪个东西在js里面不存在,如果要是真有兴趣实现这种无聊的Class,下Prototype1.6去,里面有 |
|
返回顶楼 | |
发表时间:2007-10-26
终于明白是怎么回事了,第一个问题问的比较愚蠢:),其实是可以的,第二个问题的原因是通过这种继承,只是给Validation增加了一个静态方法,调用时应该为:Validation.validate1();如果想实现多态,应该在继承的时候使用原型方法继承即可,看来以后得努力了,呵呵。
|
|
返回顶楼 | |
发表时间:2007-10-26
根本不是什么静态方法,你要extend了,那重名的原来的就没了,多态是个什么东西,想保留原来方法1.6里面有$super默认当参数传近来,都是原形方法,没有什么静态方法,唯一静态的就是你哪个param
|
|
返回顶楼 | |
发表时间:2007-10-27
js不吃java那一套的楼主……
js是基于对象的,而不是面向对象的 |
|
返回顶楼 | |