-
-
Save Raynos/b86ed871069c90a55bb7 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Array = require("Array") | |
pd = {} | |
pd.bindAll = bindAll | |
pd.extend = extend | |
pd.Name = Name | |
return pd | |
extend(target, ...sources) { | |
Array.forEach(sources, (elem) { | |
Array.forEach(keysof elem, (name) { | |
target[name] = elem[name] | |
}) | |
}) | |
return target | |
} | |
namespace(object, key) { | |
privates = new object | |
valueOf = object.valueOf | |
object.valueOf = (self, value) { | |
if (value == key) { | |
return privates | |
} | |
return valueOf(self, value) | |
} | |
return privates | |
} | |
Name() { | |
key = {} | |
return name | |
name(object) { | |
privates = object:valueOf(key) | |
if (privates == object) { | |
return namespace(object, key) | |
} | |
return privates | |
} | |
} | |
bindAll(obj, ...sources) { | |
pd.extend(obj, ...sources) | |
Array.forEach(Array.filter(keysof obj, isMethod), bindMethods) | |
return obj | |
isMethod(name) { | |
return typeof obj[name] == "function" | |
} | |
bindMethods(name) { | |
f = obj[name] | |
obj[name] = (...args) { | |
f(obj, ...args) | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment