您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Enumeration class. Each enum propertiy has the properties "ordinal", "name" and "text".
当前为
此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.greasyfork.icu/scripts/391854/745818/Enum.js
// ==UserScript== // @name Enum // @namespace hoehleg.userscripts.private // @version 0.1 // @description Enumeration class. Each enum propertiy has the properties "ordinal", "name" and "text". // @author Gerrit Höhle // @grant none // ==/UserScript== /* jslint esnext: true */ const Enum = (() => { const add = (thisObj, name, ordinal, text = "") => { text = String(text); const enumInstance = new class EnumProperty { get ordinal() { return ordinal; } get name() { return name; } get text() { return text; } [Symbol.toPrimitive](hint) { return (hint === "number") ? this.ordinal : this.text; } valueOf() { return this.ordinal; } toString() { return `object Enum ${this.name}`; } }(); console.assert(typeof thisObj.name === "undefined", `duplicate enum [${name}]`); console.assert(typeof thisObj.ordinal === "undefined", `duplicate ordinal [${ordinal}] for enum [${name}]`); thisObj[name] = thisObj[ordinal] = enumInstance; }; return class Enum { constructor(firstOrdinal = 0, ordinalSupplier = previousOrdinal => previousOrdinal + 1) { this._firstOrdinal = firstOrdinal; this._ordinalSupplier = ordinalSupplier; } init(enumDef = []) { let ordinal; const firstOrdinal = this._firstOrdinal; const ordinalSupplier = this._ordinalSupplier; Object.getOwnPropertyNames(this).forEach(propName => delete this[propName]); const ordinals = []; for (let enumDefObj of (Array.isArray(enumDef) ? enumDef : [ enumDef ])) { for (let [name, text] of Object.entries(enumDefObj)) { ordinal = Number.parseInt((typeof ordinal === "undefined") ? firstOrdinal : ordinalSupplier(ordinal)); add(this, name, ordinal, text); ordinals.push(ordinal); } } const enums = [ ...new Set(ordinals) ].sort().map(ordinal => this[ordinal]); this[Symbol.iterator] = () => enums[Symbol.iterator](); return Object.freeze(this); } }; })();