论坛首页 Web前端技术论坛

关于prototype和this关系的疑问

浏览 2577 次
精华帖 (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方法,提供一个参数,怎么不行,是不是写错了?


   发表时间:2007-10-26  
补充:需要引入prototype.js
0 请登录后投票
   发表时间: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去,里面有
0 请登录后投票
   发表时间:2007-10-26  
终于明白是怎么回事了,第一个问题问的比较愚蠢:),其实是可以的,第二个问题的原因是通过这种继承,只是给Validation增加了一个静态方法,调用时应该为:Validation.validate1();如果想实现多态,应该在继承的时候使用原型方法继承即可,看来以后得努力了,呵呵。
0 请登录后投票
   发表时间:2007-10-26  
根本不是什么静态方法,你要extend了,那重名的原来的就没了,多态是个什么东西,想保留原来方法1.6里面有$super默认当参数传近来,都是原形方法,没有什么静态方法,唯一静态的就是你哪个param
0 请登录后投票
   发表时间:2007-10-27  
js不吃java那一套的楼主……
js是基于对象的,而不是面向对象的
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics