是否可以在没有目标的方法上使用dojo方面?

时间:2015-07-08 00:17:04

标签: javascript dojo

我有一个模块如下:

define([...], function(...){
  function anothermethod() {...}
  function request() {....}
  request.anothermethod = anothermethod;
  return request;
}

现在我想在请求方法(闭包)的anothermethod方法之前使用dojo方面。可能吗?如果是这样,我应该在目标参数中添加什么?

aspect.before(target, methodName, advisingFunction);

另一种方法不是直接调用的。首先调用request方法,间接调用anothermethod:

require(['dojo/aspect'], function(aspect){
  function anothermethod() {
    console.log('another method');
  }
  function beforeanothermethod() {
    console.log('before another method');
  }
  function request() {
    anothermethod();
  }
  request.anothermethod = anothermethod;
  aspect.before(request, 'anothermethod', beforeanothermethod);
  request();
})

https://jsfiddle.net/ahwgw5tb/1/

2 个答案:

答案 0 :(得分:1)

您可以使用request作为目标。 参见:

require(['dojo/aspect'], function(aspect){
  function anothermethod() {
    console.log('another method');
  }
  function beforeanothermethod() {
    console.log('before another method');
  }
  
  function request() {}
  request.anothermethod = anothermethod;
  
  aspect.before(request, 'anothermethod', beforeanothermethod)
  
  request.anothermethod();
})
<script src="//ajax.googleapis.com/ajax/libs/dojo/1.10.4/dojo/dojo.js"></script>

答案 1 :(得分:1)

在您的情况下,您已经有一个目标,即request

aspect.before(request, 'anothermethod', function() {
  // Do something
});

但要回答你原来的问题,不,你不能。你总是需要一个目标。正常功能的目标是该功能所在的本地范围,但无法访问该功能。

因此,最好的解决方案是将其添加到特定对象(request),就像您一样。