我有方法A
的原型m()
和其继承人的两个:B
和C
,每个都已覆盖m()
。 A
,B
和C
的许多对象都存储在数组arr
中。我可以将此数组保存到storage.StorageArea或从那里加载它。但加载后,似乎getten数组中的对象不是A
,B
或C
的实例,而只是没有方法的属性集。这样arr[i].m()
导致
TypeError:arr [i] .m不是函数
我可以使用A.prototype.m.call(arr[i])
但是多态性在哪里?什么是有效的方式?
编辑:添加了一些代码
var A = function(name) {
this.name = name
}
A.prototype.m = function() {
console.log("I am " + this.name);
}
var B = function(name) {
A.apply(this, [name]);
}
B.prototype = Object.create(A.prototype);
B.prototype.constructor = B;
var C = function(name) {
A.apply(this, [name]);
}
C.prototype = Object.create(A.prototype);
C.prototype.constructor = C;
function main() {
let arr = new Array(3);
arr[0] = new A("A");
arr[1] = new B("B");
arr[2] = new C("C");
console.log("-- before storing --");
arr[0].m();
arr[1].m();
arr[2].m();
browser.storage.local.set({arr});
browser.storage.local.get({arr}).then(onSuccess);
}
function onSuccess(result) {
console.log("Result: ");
console.log(result);
console.log("-- after storing --");
result.arr[0].m();
result.arr[1].m();
result.arr[2].m();
}
答案 0 :(得分:0)
当您首先调用browser.storage.local.set
提供的对象获取stringified
时,它会被存储。
现在,当您尝试获取值时,获取JSON.parse
。
现在,您知道JSON.parse(JSON.stringify(anyobject))
将返回一个完全克隆对象,该对象与 anyobject 没有任何关联。他们都有不同的参考。这就是你遇到这种结果的原因。
一般情况下,我主要使用window.localStorage.setItem
,我需要显式传递stringified
值,并在获取值parse
之后返回以获取对象。