浏览 3368 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-11-01
Validation.prototype = { initialize : function(form, options){ this.options = Object.extend({ onSubmit : true, stopOnFirst : false, immediate : false, focusOnError : true, useTitles : false, onFormValidate : function(result, form) {}, onElementValidate : function(result, elm) {} }, options || {}); this.form = $(form); var id = Validation.getElmID(this.form); Validation.validations[id] = this; if(this.options.onSubmit) Event.observe(this.form,'submit',this.onSubmit.bind(this),false); if(this.options.immediate) { var useTitles = this.options.useTitles; var callback = this.options.onElementValidate; Form.getElements(this.form).each(function(input) { // Thanks Mike! Event.observe(input, 'blur', function(ev) { Validation.validate(Event.element(ev),{useTitle : useTitles, onElementValidate : callback}); }); }); } }, onSubmit : function(ev){ if(!this.validate()) Event.stop(ev); }, 其中Event.observe(this.form,'submit',this.onSubmit.bind(this),false);这句中的this.onSubmit.bind(this)不解,为什么要绑定this呢,this.onSubmit不行吗? 为了解决疑问,进行简单test: <script src="prototype.js" type="text/javascript"></script> <script type="text/javascript"> var Validation = Class.create(); Validation.prototype = { initialize:function(btn){ alert("init"); this.btn = btn; //重点的一段代码 Event.observe(this.btn,'click',this.onClick,false); //下边同样可以运行 // Event.observe(this.btn,'click',this.onClick.bind(this),false); }, onClick:function(){alert("onclick");} }; </script> </head> <body> <input type="button" name="aa" id="aaid" value="测试" /> <script type="text/javascript"> var val = new Validation('aaid'); </script> </body> </html> 为什么这段代码可以,而我去掉Validation 中的bind(this)就不行呢? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-11-01
有个东西叫context,它还可以随着函数调用方式不同变化,还有个东西叫wrapper,它可以强制改变context,保持你想保留的context
|
|
返回顶楼 | |
发表时间:2007-11-01
afcn0 写道 有个东西叫context,它还可以随着函数调用方式不同变化,还有个东西叫wrapper,它可以强制改变context,保持你想保留的context
![]() |
|
返回顶楼 | |
发表时间:2007-11-01
再教学一下
test={aa:123,bb:function(){alert(this.aa)}} b=test.bb; c=test.bb.bind(test); test.bb(); b(); c(); 还不明白,那就......... |
|
返回顶楼 | |
发表时间:2007-11-01
this就当是句子中的主语.
|
|
返回顶楼 | |
发表时间:2007-11-01
afcn0 写道 test={ aa:123, bb:function(){ alert(this.aa) } }; b=test.bb; c=test.bb.bind(test); test.bb(); b(); c(); 大概明白了,可不可这样理解,把某个方法bind到一个对象上之后,对改方法的调用对象将一直是绑定的对象。 |
|
返回顶楼 | |
发表时间:2007-11-01
|
|
返回顶楼 | |
发表时间:2007-11-01
sp42 写道
引用 说句真心话,其实js就这么几回事,只不过对JS混淆视听的东西太多,而且最重要的是没有所谓的offical guide那里要命!
感触很深,我希望能把javascript基础打好,所以看了很多关于闭包,上下文,什么面向对象和继承的模拟等文章,发现越看脑袋越乱。 同一个概念和问题,有不同的观点和看法,谁也说服不了谁,但是又很少有能彻底说清楚和明白的人,反而是看了几篇翻译的文章后才有点条理。学好javascript,真的很难吗?迷茫中..... |
|
返回顶楼 | |
发表时间:2007-11-01
呵呵 这也难怪...JS混合太多东东...变得有点...禅了...
|
|
返回顶楼 | |