javascript-在CoffeeScript类中装饰函数
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript-在CoffeeScript类中装饰函数,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1715字,纯文字阅读大概需要3分钟。
内容图文

我正在编写一个骨干应用程序,我想编写一个经过身份验证的装饰器,可以用来装饰路由器类中的方法(路由)列表.
因此,我使用了几种方法的路由器,并尝试了类似的方法.但是,当我调用要装饰的路线时,装饰器未连接.
class MyApp extends Backbone.Router
routes:
'' : 'home'
'foo' : 'foo'
'bar' : 'bar'
authenticated: ['foo', 'bar']
initialize: ->
@decorateAuthenticatedFunctions()
decorateAuthenticatedFunctions: =>
_.each @authenticated, (method)=>
@[method] = (args)=>
if @authorized()
@[method].apply @, args
else
@navigate '', true
authorized: =>
@user? and @user.loggedIn
foo: =>
#do stuff
bar: =>
#do stuff
我该如何解决这个问题?
解决方法:
你有几个问题.
首先,我不认为初始化由于某种原因被调用.我可以说出来,因为如果它被调用了,那么它将引发错误(请参阅下一点).现在我不是骨干专家,但是也许尝试使用构造函数代替?
class MyApp extends Backbone.Router
constructor: ->
super
@decorateAuthenticatedFunctions()
其次,该循环将无法正常工作.您将@ [method]替换为新函数,该函数在该函数中调用@ [method].成功后,您将获得一个递归的无限函数调用.因此,请保存对原始函数的引用,然后使用decorator函数调用该引用.
而且当您在那儿时,不需要下划线,因为coffee脚本确实循环得很好.而且,您甚至根本不需要关闭该循环,因为您仅立即使用了循环值.
这个略有改动的非主干版本可以使用:
class MyApp
authenticated: ['foo', 'bar']
constructor: ->
@decorateAuthenticatedFunctions()
decorateAuthenticatedFunctions: =>
for method in @authenticated
fn = @[method]
@[method] = (args) =>
if @authorized()
fn.apply @, args
else
console.log 'denied'
authorized: =>
@user? and @user.loggedIn
foo: =>
console.log 'foo'
bar: =>
console.log 'bar'
app = new MyApp
app.user = { loggedIn: no }
app.foo() # denied
app.bar() # denied
app.user = { loggedIn: yes }
app.foo() # foo
app.bar() # bar?
内容总结
以上是互联网集市为您收集整理的javascript-在CoffeeScript类中装饰函数全部内容,希望文章能够帮你解决javascript-在CoffeeScript类中装饰函数所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。