_.deepBindAll for Underscore.js
Underscore has a great method called _.bindAll (http://underscorejs.org/#bindAll) that ensures all methods on an object are always run within the context of that object whenever they are invoked.
Recently, I found a need for a more robust _.bindAll that would recursively look for all the methods on the object and it's child objects. This little method is the result:
((_) ->
_.deepBindAll = (obj) ->
target = _.last arguments
_.each obj, (value, key) ->
if _.isFunction value
obj[key] = _.bind value, target
else if _.isObject value
obj[key] = _.deepBindAll value, target
obj
)(_)
Now, deep referenced methods get the same treatment as if they were defined directly on the parent:
foo =
bar : 'test'
x :
y : -> this.bar
z : -> this.bar
_.deepBindAll foo
foo.x.y() is foo.z() is 'test' # true
Written by Patrick Camacho
Related protips
Have a fresh tip? Share with Coderwall community!
Post
Post a tip
Best
#Underscorejs
Authors
Sponsored by #native_company# — Learn More
#native_title#
#native_desc#