我希望用户可以自由使用其他本机
sessionStorage
方法,我可能无法在代理中实现自己。
我宁愿给用户只使用本机的自由
会话存储
如果他打算这么做。您的实现确实有自己的独立功能,它使用
会话存储
会话存储
. 没有理由在对象上实现其接口。(另请参见
composition over inheritance
).
有什么方法可以创建ES6吗
class
会话存储
在构造函数中还是什么?
SessionStorage
会话存储
是单例,不能实例化第二个
会话存储
,因此继承在这里绝对不起作用。
有三种方法可以解决这个问题(我将为通用情况编写代码,从要包装的任意对象实例化,您可能需要一个类似静态单例的自定义存储):
-
function custom(orig) {
orig.get = function() { ⦠};
return orig;
}
-
寄生继承,使用对象上的反射创建完整的包装。
function custom(orig) {
const obj = {
get() { ⦠};
};
for (const p in orig) { // assuming everything is enumerable - alternatively use
// for (const p of Object.getOwnPropertyNames(â¦))
// or even incorporating the prototype chain
obj[p] = typeof orig[p] == "function"
? (...args) => orig[p](...args)
: orig[p];
}
return obj;
}
-
Proxy
用一个
suitable handler
:
const customMethods = {
get() { ⦠}
};
const handler = {
has(target, name) {
return name in customMethods || name in target;
},
get(target, name) {
if (name in customMethods) return customMethods[name];
else return target[name];
// if its a native object with methods that rely on `this`, you'll need to
// return target[name].bind(target)
// for function properties
}
}
function custom(orig) {
return new Proxy(orig, handler);
}