5

JavaScriptでオブジェクトの.lengthプロパティをオーバーライドする方法を探しています。

現在、parent.properties.objects配列にラッパーがあります

(親は、コードをコンテキストで読みやすくするために使用されます)

これが基本構造です。

(親変数は名前空間で定義され、初期化されます)

var parent = function () {
  this.properties = {
    objects: [];
  };
};

ラッパー

(function () {
  "use strict";

  objects = function () {

引数が渡されない場合は、getを想定します

  if (arguments.length === 0) {
    var _objects = parent.properties.objects;
    return _objects;

オブジェクトを変更またはフィルタリングする

    } else if (arguments.length > 0) {
      ...
    }
  };

これにより、object.prototype([prototype]ではない)変数が作成され、メソッドlength()が追加されます。

  objects.prototype.length = function () {
    var length = parent.properties.objects.length;
    return length;
  }

エラー

  objects.prototype.__proto__.length = function () {    
    var length = parent.properties.objects.length;
    return length;
  }

  parent.objects = objects;
})();
4

1 に答える 1

3

あなたの質問を正しく理解していると仮定すると、次のコードが役立つかもしれません:

function MyObject() {
  this.myActualData = [];
}

Object.defineProperty(MyObject.prototype, 'length', {get: function() {
   return this.myActualData.length;
}});

そして、これが使用中の例です:

var x = new MyObject();
x.myActualData.push("Hello");
x.myActualData.push("World");
x.length; // is 2

注: これは、ecmascript 5 以降のブラウザーでのみ機能します。

于 2013-12-16T00:40:27.867 に答える