Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用proto创建存储子类_Javascript_Class_Prototype - Fatal编程技术网

Javascript 使用proto创建存储子类

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; >

我有一个JS昏迷,或者我没有我想的那么好

我想创建一个类
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