2

ブラウザ間で互換性のある方法 (IE8 まで) で、 の制約されArrayBufferViewた境界の動作を模倣できるかどうかを知りたいです。ArrayBuffer

次のような Javascript 配列構造を考えてみましょう。

var a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];

bのサブセットの配列ビューを取得したいと思いaます。のインデックスが変更された場合など、 のインデックスもb変更されaます。

使用例:

var b = ViewOf(a, 3, 6); // Make a view of a, from index 3 to 6
console.log(b);          // [3, 4, 5, 6]
b[0] = 42;
console.log(a);          // [0, 1, 2, 42, 4, 5, 6, 7, 8, 9]
4

3 に答える 3

1

Object.defineProperty がぎくしゃくしているので、IE8 についてはわかりませんが、他のコメントで指摘されている理由により、あなたが求めるものがこれまでで最高のアイデアではなくても、これはあなたが求めていることを行うようです:

var a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];

function ViewOf(orig, from, to){
   var sub=orig.slice(from, to);
   for(var i=0, mx=sub.length;i<mx;i++){(function(i){  var it=sub[i];
     Object.defineProperty(sub, i, { get: function(){ return  it;}, set: function(v){ return it=orig[i+from]=v; }   });
   }(i));}
  return sub;
}

var b = ViewOf(a, 3, 6); // Make a view of a, from index 3 to 6
console.log(b);          // [3, 4, 5, 6]
b[0] = 42;
console.log(a);  //shows: [0, 1, 2, 42, 4, 5, 6, 7, 8, 9]
于 2013-06-07T18:01:04.133 に答える
0

https://github.com/inexorabletash/polyfillをご覧ください。

このポリフィルライブラリには、ArrayBuffer と ArrayBufferView のポリフィルを含む typedarray.js があります。

私はこのライブラリを知りません。簡単なグーグル検索のみ..

于 2013-06-07T17:56:45.627 に答える
0

これはデフォルトでは不可能です。カスタム関数でそれを模倣できます。

var a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];

ViewOf = function(a, startIdxx, endIdxx){
  return {
    startIdx: startIdxx,
    endIdx: endIdxx,
    set: function(index, value){
      a[index+this.startIdx] = value;
    },
    get: function(index){
      return a[index+this.startIdx];
    }
  }
}

上記の関数を以下のように使用できるようになりました

b = ViewOf(a, 3, 6);
b.set(0, 42);
console.log(a);

JS フィドル: http://jsfiddle.net/YewC4/4/

于 2013-06-07T17:58:11.210 に答える