使用proto创建一个Storage子类
Create a Storage subclass with proto
我的JS被屏蔽了,或者我没有想象的那么好。。。
我想创建一个扩展Storage
(localStorage
和sessionStorage
)的类Sites
。我之所以想要它,是因为存储已将项命名为AND .length
。非常适合我想要的。
所以我做了这个(在rweb
中以名称命名):
rweb.Sites = function Sites() {
// There might be something useful in Storage's constructor?
Storage.call(this);
this.STORAGE = 'sync';
};
rweb.Sites.prototype = Object.create(Storage.prototype);
rweb.Sites.prototype.constructor = rweb.Sites;
我想这就是我通常做JS类的方式…:创建构造函数,将其他原型分配给它,重写构造函数。
我重写构造函数,这样:
var sites = new rweb.Sites;
sites.constructor == rweb.Sites;
> true
它在新的构造函数中失败
TypeError:对象函数Storage(){[本机代码]}没有方法"call"
函数Storage怎么可能不可调用?(很公平,它还没有完全公开。)我如何使用它的构造函数?
如果我从构造函数中删除Storage.call
,我可以创建对象sites
,但当我尝试使用它的接口时:
var sites = new rweb.Sites;
> Sites {}
sites.setItem('foo', 'bar');
它告诉我:
TypeError:非法调用
什么??如果我console.log(sites.setItem)
,我可以看到它真的是函数,我的意思是:
函数setItem(){〔本机代码〕}
我做得完全错了吗?还是他们真的没有暴露足够的Storage
使其可重复使用?
BTW:我可以扩展Storage
并使用它:
Storage.prototype.foo = function() {
return 'bar';
};
sites.foo(); // returns 'bar' and no errors
所以我认为原型设计是可行的。。。
我正在使用Chrome,它将是Chrome的扩展,所以它可以是高科技的。(我听说有setPrototypeOf
要来了。)
Storage
未完全公开且不可扩展。
可能里面有太多危险的魔法。
相关文章:
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- jQuery:循环一个具有不同超时值的循环
- 当包含另一个asp文件时,是否也包含所有引用的样式和脚本页面
- 从javascript创建一个列表
- 节点导出返回一个空对象
- 使用clickToggle并在单击另一个元素时关闭元素
- 我可以在json对象中添加一个函数吗
- 使用javascript将动态表从一个html页面打印到另一个html页
- 将jsp文件下拉列表中的选定项分配给一个java变量(比如String selection)
- 表追加而不附加最后一个元素
- 我如何找到一个句子中的所有空格并替换忽略它们
- D3在一个调用中绘制不同的SVG形状,没有可见性
- 如何在android中使用phonegap将文件从一个文件夹移动/复制到另一个文件夹
- 使用类从一个标记中双击事件
- Javascript,访问一个主要对象模块模式中的每个对象
- 从“选项”弹出窗口中选择一个值,然后将其保存到 Chrome.storage,以便在后台脚本中用作值
- 使用proto创建一个Storage子类
- 在chrome.storage中存储一个复杂对象
- 使用chrome.storage.local.get获取一个值并将其赋值给一个变量
- 如何使用chrome.storage.local.get和XMLHttpRequest同步执行一个函数