JSブラックアウトしたり、思ったより上手くいかなかったり…
(と)Sites
を拡張するクラスを作成したい。Storage には AND という名前のアイテムがあるため、それが必要です。私が欲しいものにぴったりです。Storage
localStorage
sessionStorage
.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.call
コンストラクターからを削除すると、 object を作成できますsites
が、そのインターフェイスを使用しようとすると:
var sites = new rweb.Sites;
> Sites {}
sites.setItem('foo', 'bar');
それは私に言います:
TypeError: 不正な呼び出し
何??console.log(sites.setItem)
私が見ることができれば、それは本当に私が意味する機能です:
関数 setItem() { [ネイティブ コード] }
私はそれを完全に間違っていStorage
ますか、それとも再利用できるように十分に公開していませんでしたか?
ところで:私はそれを拡張Storage
して使用することができます:
Storage.prototype.foo = function() {
return 'bar';
};
sites.foo(); // returns 'bar' and no errors
プロトタイピングはうまくいくと思います...
私は Chrome を使用していますが、すべて Chrome 拡張機能になるため、ハイテクになる可能性があります。(来ると聞きましたsetPrototypeOf
。)