2016-05-17 6 views
1

私はちょっと混乱しています。オブジェクトのすべてのインスタンスで使用できるオブジェクトのすべてのプロパティをクリアする関数が必要です。だから、prototypeのclear()関数を追加しました。これは次のコードですJavascript + Angular + Prototypeクリアオブジェクトのプロパティ

(function() { 

Supplier.$inject = []; 

angular.module('webclient').factory('Supplier', Supplier); 

function Supplier() { 

    Supplier.prototype = { 
     clear: function() { 
      for (var key in this) { 
       //skip loop if the property is from prototype 
       if (this.hasOwnProperty(key)) 
        continue; 


       console.log("key:" + key); 
       this[key] = undefined; 
      } 
     }, 
    } 

    return Supplier; 
}; 
})(); 

したがって、現在のサプライヤオブジェクトのすべてのプロパティをクリアしたいと考えています。だから、サプライヤオブジェクトは、以下の特性を有していた場合:

仕入先を:21、 Eメール:なし

私はundefinedにプロパティを設定したいと思います。クラスを次のように使用します:

var supplier = new Supplier();

supplier.SupplierID = 21; supplier.Email = "None";

未定義に各プロパティを設定するために、I)

supplier.clear(だろう。

アイデア?

おかげ

undefinedにちょうど delete()それらのプロパティを設定しないでください

答えて

1

これを試してみてください(plnkr

function Supplier() { 
    var supplier = function() {}; 
    supplier.prototype.clear = function() { 
     for (var key in this) { 
      if (!this.hasOwnProperty(key)) 
       continue; 
      delete this[key]; 
     } 
    }; 
    return supplier; 
} 
0

:キーはプロトタイプでない場合

delete this[key]; 

そして@jcubicは...

、右hasOwnProperty戻り真であります
1

hasOwnProperty戻り値keyがプロトタイプにない場合はtrueまた、プロトタイプはコンストラクタの外に設定する必要があるため、コードは次のようになります。

function Supplier() { } 

Supplier.prototype = { 
    clear: function() { 
     for (var key in this) { 
      if (this.hasOwnProperty(key)) { 
       console.log("key:" + key); 
       this[key] = undefined; 
      } 
     } 
    }, 
} 
関連する問題