method

WebJar for method

Лицензия

Лицензия

MIT
Группа

Группа

org.webjars.npm
Идентификатор

Идентификатор

method
Последняя версия

Последняя версия

2.0.0
Дата

Дата

Тип

Тип

jar
Описание

Описание

method
WebJar for method
Ссылка на сайт

Ссылка на сайт

https://www.webjars.org
Система контроля версий

Система контроля версий

https://github.com/Gozala/method

Скачать method

Имя Файла Размер
method-2.0.0.pom
method-2.0.0.jar 123 KB
method-2.0.0-sources.jar 22 bytes
method-2.0.0-javadoc.jar 22 bytes
Обзор

Как подключить последнюю версию

<!-- https://jarcasting.com/artifacts/org.webjars.npm/method/ -->
<dependency>
    <groupId>org.webjars.npm</groupId>
    <artifactId>method</artifactId>
    <version>2.0.0</version>
</dependency>
// https://jarcasting.com/artifacts/org.webjars.npm/method/
implementation 'org.webjars.npm:method:2.0.0'
// https://jarcasting.com/artifacts/org.webjars.npm/method/
implementation ("org.webjars.npm:method:2.0.0")
'org.webjars.npm:method:jar:2.0.0'
<dependency org="org.webjars.npm" name="method" rev="2.0.0">
  <artifact name="method" type="jar" />
</dependency>
@Grapes(
@Grab(group='org.webjars.npm', module='method', version='2.0.0')
)
libraryDependencies += "org.webjars.npm" % "method" % "2.0.0"
[org.webjars.npm/method "2.0.0"]

Зависимости

Библиотека не имеет зависимостей. Это самодостаточное приложение, которое не зависит ни от каких других библиотек.

Модули Проекта

Данный проект не имеет модулей.

method

Build Status

Browser support

Library provides an API for defining polymorphic methods that dispatch on the first argument type. This provides a powerful way for decouple abstraction interface definition from an actual implementations per type / instance, without risks of interference with other libraries.

Motivation

  • Provide a high-performance, dynamic polymorphism construct as an alternative to existing object methods that does not provides any mechanics for guarding against name conflicts.
  • Allow independent extension of types, and implementations of methods on types, by different parties.

Install

npm install method

Use

var method = require("method")

// Define `isWatchable` method that can be implemented for any type.
// Use some UNIQUE identifer for the method to avoid any naming collisions.
// If not provided one will be generate but with npm it's easy to end up
// with copies of same library and there for copies of the same function
// leading to surprises. So just really pick a name that is unique!
var isWatchable = method("isWatchable@watchables")

// If you call it on any object it will
// throw as nothing implements that method yet.
//isWatchable({}) // => Exception: method is not implemented

// If you define private method on `Object.prototype`
// all objects will inherit it.
Object.prototype[isWatchable] = function() {
  return false;
}

isWatchable({}) // => false


// Although `isWatchable` property above will be enumerable and there for
// may damage some assumbtions made by other libraries. There for it"s
// recomended to use built-in helpers methods that will define extension
// without breaking assumbtions made by other libraries:

isWatchable.define(Object, function() { return false })


// There are primitive types in JS that won"t inherit methods from Object:
isWatchable(null) // => Exception: method is not implemented

// One could either implement methods for such types:
isWatchable.define(null, function() { return false })
isWatchable.define(undefined, function() { return false })

// Or simply define default implementation:
isWatchable.define(function() { return false })

// Alternatively default implementation may be provided at creation:
isWatchable = method(function() { return false })

// Method dispatches on an first argument type. That allows us to create
// new types with an alternative implementations:
function Watchable() {}
isWatchable.define(Watchable, function() { return true })

// This will make all `Watchable` instances watchable!
isWatchable(new Watchable()) // => true

// Arbitrary objects can also be extended to implement given method. For example
// any object can simply made watchable:
function watchable(object) {
  return isWatchable.implement(objct, function() { return true })
}

isWatchable(watchable({})) // => true

// Full protocols can be defined with such methods:
var observers = "observers@" + module.filename
var watchers = method("watchers@watchables")
var watch = method("watch@watchables")
var unwatch = method("unwatch@watchables")

watchers.define(Watchable, function(target) {
  return target[observers] || (target[observers] = [])
})

watch.define(Watchable, function(target, watcher) {
  var observers = watchers(target)
  if (observers.indexOf(watcher) < 0) observers.push(watcher)
  return target
})
unwatch.define(Watchable, function(target, watcher) {
  var observers = watchers(target)
  var index = observers.indexOf(watcher)
  if (observers.indexOf(watcher) >= 0) observers.unshift(watcher)
  return target
})

// Define type Port that inherits form Watchable

function Port() {}
Port.prototype = Object.create(Watchable.prototype)

var emit = method("emit")
emit.define(Port, function(port, message) {
  watchers(port).slice().forEach(function(watcher) {
    watcher(message)
  })
})

var p = new Port()
watch(p, console.log)
emit(p, "hello world") // => info: "hello world"

Версии библиотеки

Версия
2.0.0