您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Weakly references a value to a specified object. May be used to create private fields.
此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.cn-greasyfork.org/scripts/391608/744693/PrivateProperty.js
// ==UserScript== // @name PrivateProperty // @namespace hoehleg.userscripts.private // @version 0.2 // @description Weakly references a value to a specified object. May be used to create private fields. // @author Gerrit Höhle // @grant none // ==/UserScript== /* jshint esversion: 6 */ const PrivateProperty = (() => { let prototypeFunctions; class PrivateProperty { constructor(initialValue) { this._weakReferences = new WeakMap(); this._initialValue = initialValue; } init(object, initialValueSpecific = this._initialValue) { const value = (typeof initialValueSpecific === "function") ? initialValueSpecific() : initialValueSpecific; this._weakReferences.delete(object); this._weakReferences.set(object, { initialValue: initialValueSpecific, value: value }); return this; } has(object) { return this._weakReferences.has(object); } get(object) { const data = this._weakReferences.get(object); if (data) { return data.value; } } set(object, value) { const data = this._weakReferences.get(object) || { initialValue: this._initialValue }; data.value = value; this._weakReferences.set(object, data); } getInitialValue(object) { const data = this._weakReferences.get(object); return data ? data.initialValue : this._initialValue; } getOrCompute(object, fnc) { let data = this._weakReferences.get(object); if (!data) { data = { initialValue: this._initialValue, value: fnc() }; this._weakReferences.set(object, data); } return data.value; } for(object) { const bound = prototypeFunctions.map(([propName, fnc]) => ({ [propName]: fnc.bind(this, object) })); return Object.assign({}, ...bound); } } prototypeFunctions = Object.getOwnPropertyNames(PrivateProperty.prototype) .filter(propName => typeof PrivateProperty.prototype[propName] === "function") .filter(propName => propName !== "constructor") .filter(propName => propName !== "for") .map(propName => ([ [propName], PrivateProperty.prototype[propName] ])); return PrivateProperty; })();