Socket
Socket
Sign inDemoInstall

demethodize

Package Overview
Dependencies
0
Maintainers
1
Versions
4
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    demethodize

Decontextualize your methods


Version published
Maintainers
1
Install size
10.1 kB
Created

Readme

Source

Demethodize

npm install demethodize

Demethodizing allows you to use methods as generics. You can just use call and apply to do this, like so:

Array.prototype.map.call('abcdef', function (letter) {
  return letter.toUpperCase();
}); // ['A', 'B', 'C', 'D', 'E', 'F']

This is kind of verbose if you're using it a lot. Array.prototype.map can be simply substituted with [].map. This gets even easier still with demethodize, which produces reusable functions.

var map = demethodize([].map);
map('abcdef', function (letter) {
  return letter.toUpperCase();
}); // ['A', 'B', 'C', 'D', 'E', 'F']

map('123456', function (n) {
  return Number(n) + 1;
}); // [2, 3, 4, 5, 6, 7]

There's an added method, demethodize.functional. This takes all the arguments that would be supplied to the method, then returns another function. Pass the context into that function. See below for an example. This is great for partial application and functional programming in general.

var slice = demethodize.functional([].slice);

// pass args here
var dropFirstAndLastTwo = slice(2, -2);

// then pass the context (an array) here
dropFirstAndLastTwo('abcdefgh'); // ['c', 'd', 'e', 'f']
dropFirstAndLastTwo('ijklm'); // ['k']

I've benchmarked a number of equivalent implementations for speed, and am using an implementation with .apply() as it is fastest.

Example benchmark output (see bench.js for implementations)

Hang tight, running benchmarks...
........
apply 2 is fastest.
apply 2 x 1,373,646 ops/sec ±1.48% (91 runs sampled)
apply 1 is 3.98% slower than fastest.
apply 1 x 1,318,984 ops/sec ±2.58% (89 runs sampled)
call spread is 16.82% slower than fastest.
call spread x 1,142,603 ops/sec ±5.11% (75 runs sampled)
call bind 2 is 18.85% slower than fastest.
call bind 2 x 1,114,747 ops/sec ±1.47% (89 runs sampled)
call bind 1 is 20.31% slower than fastest.
call bind 1 x 1,094,665 ops/sec ±1.92% (91 runs sampled)
double bind is 21.23% slower than fastest.
double bind x 1,082,039 ops/sec ±2.07% (89 runs sampled)
call bind 3 is 23.46% slower than fastest.
call bind 3 x 1,051,395 ops/sec ±1.76% (89 runs sampled)
apply 3 is 54.54% slower than fastest.
apply 3 x 624,405 ops/sec ±4.53% (84 runs sampled)

FAQs

Last updated on 27 Mar 2015

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc