Jake Verbaten (2011-09-24T13:33:18.000Z)
dignifiedquire at gmail.com (2014-06-17T15:05:11.492Z)
There is no standardized way to create a new function with a prototype which is not Function.prototype. I propose Function.create ```js /* * Creates a new function whose prototype is proto. * The function body is the same as the function fbody. * The hash of propertydescriptors props is passed to defineproperties just like * Object.create does. */ Function.create = (function() { var functionBody = function _getFunctionBody(f) { return f.toString().replace(/.+\{/, "").replace(/\}$/, ""); }; var letters = "abcdefghijklmnopqrstuvwxyz".split(""); return function _create(proto, fbody, props) { var parameters = letters.slice(0, fbody.length); parameters.push(functionBody(fbody)); var f = Function.apply(this, parameters); f.__proto__ = proto; Object.defineProperties(f, props); return f; }; })(); ``` This is the same as Object.create except the second parameter is a function. It will create a new function whose function body is the same as the function passed in. I don't believe this is possible to do in ES5 without `__proto__` jsfiddle showing an example. http://jsfiddle.net/8CrqR/ Related stackoverflow question http://stackoverflow.com/questions/7539148/how-do-i-inherit-functions
dignifiedquire at gmail.com (2014-06-17T15:01:23.682Z)
There is no standardized way to create a new function with a prototype which is not Function.prototype. I propose Function.create /* * Creates a new function whose prototype is proto. * The function body is the same as the function fbody. * The hash of propertydescriptors props is passed to defineproperties just like * Object.create does. */ Function.create = (function() { var functionBody = function _getFunctionBody(f) { return f.toString().replace(/.+\{/, "").replace(/\}$/, ""); }; var letters = "abcdefghijklmnopqrstuvwxyz".split(""); return function _create(proto, fbody, props) { var parameters = letters.slice(0, fbody.length); parameters.push(functionBody(fbody)); var f = Function.apply(this, parameters); f.__proto__ = proto; Object.defineProperties(f, props); return f; }; })(); This is the same as Object.create except the second parameter is a function. It will create a new function whose function body is the same as the function passed in. I don't believe this is possible to do in ES5 without `__proto__` jsfiddle showing an example. http://jsfiddle.net/8CrqR/ Related stackoverflow question http://stackoverflow.com/questions/7539148/how-do-i-inherit-functions