Web Analytics

metho

⭐ 222 stars Simplified Chinese by jonrandy

Metho - 一种新的方法方法

一个小型库,允许你借助 Symbols 安全地向对象添加“动态属性”。这在(除其他用途外)“猴子补丁”原生 JavaScript 类型以赋予它们新功能时非常有用(参见 metho-number, metho-set, metho-function, metho-array, 和 metho-string)。

一些可能的示例:

import * as Metho from 'metho'

const asHex = Metho.add( Number.prototype, function() { return this.toString(16) } )

console.log(65534[asHex]) // fffe

const upper = Metho.add( String.prototype, function() { return this.toUpperCase() } ) const chunk = Metho.add( String.prototype, function(length) { return this.match(new RegExp('.{1,' + length + '}', 'g')) } )

console.log("Hello World!"[upper][chunk(2)]) // ['HE', 'LL', 'O ', 'WO', 'RL', 'D!']

如何使用

Metho 非常简单,提供了 4 个基本功能,用于向目标对象添加这些“动态属性”。所有函数都会返回一个 Symbol,或者返回一个返回 Symbol 的函数。这些 Symbol 是属性的“名称”。

add(targetOrTargets, function, [options={}])

这可能是你最常用的函数。它会根据传入函数预期的参数数量使用 addWithParamsaddSimple —— 参数为 0 时使用 addSimple,否则根据 outerSyntax 选项的状态使用 addWithParamsaddProperty。当 outerSyntax 设置为 true 时,属性的语法将类似于常规函数调用:

// options.outerSyntax = false
object[property(x)]

// options.outerSyntax = true objectproperty

不使用 outerSyntax 时性能会略有下降——这就是切换的原因。要为函数指定多个目标,应传递目标数组。

重要提示 - 有人指出带有从第一个参数开始的默认参数的函数在使用 add 方法时似乎无法正常工作。虽然它们看起来表现得很奇怪,但实际上它们的行为是正确的,因为它们实际上并不期望任何参数(更清楚的解释,请参见 MDN 上关于 function.length 的信息)。如果你想添加这类方法,应直接使用 addWithParams 方法。

addWithParams(targetOrTargets, function, [options={}])

添加一个可以接受参数的“动态属性”。如果你希望调用时传递参数,可以省略括号——这在所有参数都有默认值或完全可选的函数中特别有用。
console.log(object[property(param1, param2)]  // call the dynamic property and pass parameters
console.log(object[propertyWithDefaultParams])  // equivalent to object[propertyWithDefaultParams()]

addSimple(targetOrTargets, function, [options={}])

添加一个没有参数的“动态属性”
console.log(object[property])

addProperty(targetOrTargets, propertyValue, [options={}])

向目标添加一个普通属性(如果是函数,则不会自动调用)
console.log(object[property])

高级用法和 options

下面大部分(如果不是全部的话)都是为了支持 Metho “方法” 能够在不同库中的不同目标之间共享(例如,当导入第二个使用该方法的库时,该“方法”会获得更多功能)。有关此功能的示例,请参见 metho-stringmetho-array 库 —— 这些库使用该功能创建共享的“方法”,如 reversechunk

选项 symbolName

用于为生成的 Symbol 命名(即在使用 new Symbol(symbolName 创建时)

选项 register

用于在 Metho 内部注册创建/使用的 Symbol(或函数),配合 symbolName 使用,symbolName 将成为注册表中的“键”

选项 useSymbol

允许使用已存在的 Symbol,而不是创建新的。此选项仅适用于 addPropertyaddSimple —— 也就是说,它可以传递给 add

data

这是 Metho 创建的一个 Symbol,目的是用作在目标对象上存储任意“数据”的键
myTarget[Metho.data] = "Arbitrary value"

getRegistered(name)

这将返回使用给定名称作为键存储在注册表中的 Symbol 或函数

addWithSharedSymbolName(target, function, symbolName)

一个辅助函数,用于在向新目标添加新的“方法”时使用,该“方法”可能已经存在。结合上面提到的 metho-stringmetho-array 最易理解

--- Tranlated By Open Ai Tx | Last indexed: 2026-06-19 ---