From e6014f3c98b67915f75c2f12debae87a4e97c6a7 Mon Sep 17 00:00:00 2001 From: "Alex A. Naanou" Date: Tue, 16 Jun 2020 04:27:42 +0300 Subject: [PATCH] added function methods to non-function callables... Signed-off-by: Alex A. Naanou --- object.js | 34 ++++++++++++++++++++++++++++++---- package.json | 2 +- 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/object.js b/object.js index 939439e..5b73da9 100755 --- a/object.js +++ b/object.js @@ -20,12 +20,26 @@ ((typeof define)[0]=='u'?function(f){module.exports=f(require)}:define) (function(require){ var module={} // make module AMD/node compatible... /*********************************************************************/ + + +// Function methods to link into a constructor producing a callable +// defined via .__call__(..) +// +// see: Constructor(..) for details. +module.LINK_FUNCTION_METHODS = [ + 'call', + 'apply', + 'bind', +] + + + + +//--------------------------------------------------------------------- // Helpers... -var TAB_SIZE = module.TAB_SIZE = 4 -var LEADING_TABS = module.LEADING_TABS = 1 @@ -58,10 +72,10 @@ var normalizeIndent = module.normalizeIndent = function(text, tab_size, leading_tabs){ tab_size = tab_size == null ? - TAB_SIZE + module.TAB_SIZE : tab_size leading_tabs = (leading_tabs == null ? - LEADING_TABS + module.LEADING_TABS : leading_tabs) * tab_size // prepare text... @@ -819,6 +833,9 @@ function(context, constructor, ...args){ // values are ignored. // XXX this may get removed in future versions. // +// If true do not link function methods if .__call__(..) is defined +// .__skip_call_attrs__ = bool +// // // Special methods (constructor): // @@ -1015,6 +1032,15 @@ function Constructor(name, a, b, c){ && constructor_mixin.__proto__ !== Object.prototype && (_constructor.__proto__ = constructor_mixin.__proto__) + // link function stuff for convenience... + proto.__call__ && !(proto instanceof Function) + && _constructor.__skip_call_attrs__ !== true + && module.LINK_FUNCTION_METHODS + .forEach(function(n){ + proto[n] + || Object.defineProperty(proto, n, + Object.getOwnPropertyDescriptor(Function.prototype, n)) }) + return _constructor } diff --git a/package.json b/package.json index 2a70c2d..09cce9d 100755 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ig-object", - "version": "5.0.12", + "version": "5.0.13", "description": "", "main": "object.js", "scripts": {