mirror of
https://github.com/modernw/App-Installer-For-Windows-8.x-Reset.git
synced 2026-04-20 02:34:42 +10:00
Update reader.
This commit is contained in:
@@ -529,4 +529,102 @@
|
||||
}
|
||||
global.Set = Set;
|
||||
}
|
||||
})(this);
|
||||
(function(global) {
|
||||
// 如果原生 WeakMap 已存在,则不覆盖
|
||||
if (typeof global.WeakMap !== "undefined") {
|
||||
return;
|
||||
}
|
||||
|
||||
function WeakMap(iterable) {
|
||||
// 必须使用 new 调用
|
||||
if (!(this instanceof WeakMap)) {
|
||||
throw new TypeError('Constructor WeakMap requires "new"');
|
||||
}
|
||||
|
||||
// 私有存储:每个实例独立维护一个键值对数组
|
||||
var entries = [];
|
||||
|
||||
// 验证 key 必须是对象或函数(不能是 null 或原始值)
|
||||
function validateKey(key) {
|
||||
if (key === null || (typeof key !== 'object' && typeof key !== 'function')) {
|
||||
throw new TypeError('WeakMap key must be an object');
|
||||
}
|
||||
}
|
||||
|
||||
// 设置键值对
|
||||
this.set = function(key, value) {
|
||||
validateKey(key);
|
||||
for (var i = 0; i < entries.length; i++) {
|
||||
if (entries[i][0] === key) {
|
||||
entries[i][1] = value;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
entries.push([key, value]);
|
||||
return this;
|
||||
};
|
||||
|
||||
// 获取键对应的值
|
||||
this.get = function(key) {
|
||||
validateKey(key);
|
||||
for (var i = 0; i < entries.length; i++) {
|
||||
if (entries[i][0] === key) {
|
||||
return entries[i][1];
|
||||
}
|
||||
}
|
||||
return undefined;
|
||||
};
|
||||
|
||||
// 判断是否存在指定键
|
||||
this.has = function(key) {
|
||||
validateKey(key);
|
||||
for (var i = 0; i < entries.length; i++) {
|
||||
if (entries[i][0] === key) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
};
|
||||
|
||||
// 删除指定键及其值
|
||||
this.delete = function(key) {
|
||||
validateKey(key);
|
||||
for (var i = 0; i < entries.length; i++) {
|
||||
if (entries[i][0] === key) {
|
||||
entries.splice(i, 1);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
};
|
||||
|
||||
// 处理可选的初始化参数(iterable,例如 [[key1, value1], [key2, value2]])
|
||||
if (iterable !== null && iterable !== undefined) {
|
||||
// 支持数组或类数组(具备 forEach 方法的对象)
|
||||
if (typeof iterable.forEach === 'function') {
|
||||
var self = this;
|
||||
iterable.forEach(function(item) {
|
||||
if (!Array.isArray(item) || item.length < 2) {
|
||||
throw new TypeError('Iterator value is not an entry object');
|
||||
}
|
||||
self.set(item[0], item[1]);
|
||||
});
|
||||
} else if (typeof iterable.length === 'number') {
|
||||
// 类数组对象(如 arguments)
|
||||
for (var i = 0; i < iterable.length; i++) {
|
||||
var item = iterable[i];
|
||||
if (!Array.isArray(item) || item.length < 2) {
|
||||
throw new TypeError('Iterator value is not an entry object');
|
||||
}
|
||||
this.set(item[0], item[1]);
|
||||
}
|
||||
} else {
|
||||
throw new TypeError('WeakMap iterable is not iterable');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 挂载到全局对象
|
||||
global.WeakMap = WeakMap;
|
||||
})(this);
|
||||
Reference in New Issue
Block a user