注意:请记住,这不是关于this
在 javascript 上使用的通用问题。这是关于 aspect.around 故障(它是为了设置调用的范围,但它没有)。问题是:为什么 aspect.around 出现故障?这个问题需要您仔细阅读如何使用提供的小提琴进行复制和复制!
为了解决这个问题,我不得不将我的应用程序撕成碎片。所以这里是:
http://jsfiddle.net/mercmobily/THtsv/1/
这是一个简单的表单,带有验证:
- 在文本框中输入一些内容:将调用小部件的验证方法。
- 然后按下提交按钮:验证将失败,并且将调用 aspect.around 来包装验证方法。
- 此时,尝试再次在文本框中输入任何内容:它将返回错误,因为验证器将失败,因为“this”被设置为“window”而不是小部件。
因此,一旦添加了方面,验证器就会停止工作。基本上,“this”的价值会丢失。现在:
aspect.around() 旨在在正确的范围内(显然)运行新的验证器,但它没有这样做
我可以通过将验证器的调用更改为此来“解决”这个问题:
return originalValidator.call(this, value);
但是,它没有回答“为什么'这个'丢失?”这个问题。如果你回溯代码,你会看到 aspect.around() 正在做它通常做的事情......但它一定做错了什么
那么,问题是:为什么 dojo.around() 出现故障,而不是设置this
为传递对象的范围?
默克。