Javascript 使用proto创建存储子类
我有一个JS昏迷,或者我没有我想的那么好 我想创建一个类Javascript 使用proto创建存储子类,javascript,class,prototype,Javascript,Class,Prototype,我有一个JS昏迷,或者我没有我想的那么好 我想创建一个类Sites,该类扩展Storage(localStorage和sessionStorage)。我之所以需要它,是因为存储有命名项和.length。非常适合我想要的 所以我做了这个(它在rweb中有名称空间): 我想这就是我通常做JS类的方式…:创建构造函数,为它分配其他原型,重写构造函数 我重写构造函数,以便: var sites = new rweb.Sites; sites.constructor == rweb.Sites; >
Sites
,该类扩展Storage
(localStorage
和sessionStorage
)。我之所以需要它,是因为存储有命名项和.length
。非常适合我想要的
所以我做了这个(它在rweb
中有名称空间):
我想这就是我通常做JS类的方式…:创建构造函数,为它分配其他原型,重写构造函数
我重写构造函数,以便:
var sites = new rweb.Sites;
sites.constructor == rweb.Sites;
> true
它在新构造函数中失败:
TypeError:对象函数存储(){[本机代码]}没有方法“调用”
函数存储如何不可调用?(很公平,它没有完全暴露。)我如何使用它的构造函数
如果我从构造函数中删除存储调用
,我可以创建对象站点
,但是当我尝试使用它的接口时:
var sites = new rweb.Sites;
> Sites {}
sites.setItem('foo', 'bar');
它告诉我:
TypeError:非法调用
什么??如果我console.log(sites.setItem)
我可以看到它实际上就是我的意思:
函数setItem(){[本机代码]}
我是完全错了,还是他们真的没有公开足够的存储
,使其可重用
顺便说一句:我可以扩展存储
并使用它:
Storage.prototype.foo = function() {
return 'bar';
};
sites.foo(); // returns 'bar' and no errors
所以我认为原型设计是可行的
我使用的是Chrome,它将是Chrome的扩展,所以它可以是高科技的。(我听说有一个
setPrototypeOf
即将出现。)存储设备未完全暴露,无法扩展
可能里面有太多危险的魔法。宿主对象的行为不必像用户陆地对象那样。他们根本不能表现,不能表现得很好,也不能完美地工作。所以我不能重复使用它的逻辑=(太棒了。我喜欢命名项目+。长度
)。
Storage.prototype.foo = function() {
return 'bar';
};
sites.foo(); // returns 'bar' and no errors