2016-05-17 131 views
1

我有点困惑,我想要一个函数,清除对象的所有实例可用的所有属性。所以,我添加了一个原型clear()函数。这是下面的代码:Javascript + Angular +原型清除对象属性

(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; 
}; 
})(); 

所以,我希望能够清除当前供应对象的所有属性。因此,如果供应商对象具有以下性质:

供应商ID:21, 电子邮件:无

我想的属性设置为undefined。我会使用这个类如下:

var supplier = new Supplier();

supplier.SupplierID = 21; supplier.Email =“无”;

而且每个属性设置为undefined我会

supplier.clear();

任何想法?

感谢

回答

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

不要属性设置undefined,只是delete()他们:

delete this[key]; 

而且@jcubic是正确的,hasOwnProperty返回true,如果关键是不是在原型 ...

1

hasOwnProperty返回true如果键不在原型中,原型也应该在构造函数之外设置,所以你的代码应该看起来像这样:

function Supplier() { } 

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