0

これが私のコードです:

var BoxUtility = function() {
    var boxList = Array.prototype.pop.apply(arguments);
};

Object.defineProperties(BoxUtility, {
    totalArea: {
        value: function(){
           var x = 0;
           for(var i = 0, len = boxList.length; i <= len - 1; i++){
              x = x + boxList[i].area;
           };
        return x;
        }
     }
});

私は自分のコードでこの構文を実現しようとしています:

var boxArray = [box01, box02, box03];

ボックスはオブジェクト、box01.area=>ボックスにはareaプロパティがあります

var newElement = new BoxUtility(boxArray);
alert(newElement.totalArea);

期待どおりの結果を見たいのですが、boxListは別のスコープにあると思います

definePropertiesでどのように到達できますか

4

3 に答える 3

0

thisコンストラクターののプロパティに値を割り当てる必要があります。

var BoxUtility = function() {
    // this.boxList
    this.boxList = Array.prototype.pop.apply(arguments);
};

// instance methods go on the prototype of the constructor
Object.defineProperties(BoxUtility.prototype, {
    totalArea: {

        // use get, instead of value, to execute this function when
        // we access the property.
        get: function(){
           var x = 0;

           // this.boxList
           for(var i = 0, len = this.boxList.length; i <= len - 1; i++){
              x = x + this.boxList[i].area;
           };
           return x;
        }
     }
});

var boxUtil = new BoxUtility([{area:123}, {area:456}]);
console.log(boxUtil.totalArea); // 579

可変スコープは常にレベルにありfunctionます。そのため、コンストラクター関数内でのみ使用できるローカル変数を宣言しました。ただし、コンストラクター関数を呼び出すたびに、新しいオブジェクト(this)を取得します。thisプロトタイプのインスタンスメソッドでこれらのプロパティにアクセスできるようにするには、にプロパティを追加します。

于 2012-12-27T19:59:04.697 に答える
0

これは動作します

var BoxUtility = function() {
this.boxList = Array.prototype.pop.apply(arguments);
Object.defineProperties(this, {
    totalArea: {
        get: function(){
        var x = 0;
        for(var i = 0, len = this.boxList.length; i <= len - 1; i++){
            x = x + this.boxList[i].area;
        };
        return x;
        }
    }
});};


var y = new BoxUtility(boxArray);
alert(y.totalArea)
于 2012-12-27T20:41:25.080 に答える
0

これは、コンストラクターで引数として配列を渡し、パブリックアクセス用の関数プロトタイプを宣言する簡単な方法です。

 function BoxUtility(boxArray) {
     this.boxArray = boxArray;
     this.len = boxArray.length;

  }
 Color.prototype.getAverage = function () {
      var sum = 0;
      for(let i = 0;i<this.len;i++){
       sum+=this.boxArray[i];

  }
   return parseInt(sum);
};

var red = new BoxUtility(boxArray);

alert(red.getAverage());
于 2017-12-06T07:25:52.013 に答える