hasOwnProperty - 原型 - 不起作用

时间:2016-05-13 21:40:43

标签: javascript prototype hasownproperty

我试图排除属性c,如果找到,所以它不会被添加到属性数组,但是,它仍然被添加。为什么呢?

var letters = function () {
  this.a = 5;
  this.b = 20;
};

letters.prototype = {
  c: 10
};

var letters = new letters();

function looping(obj) {
  var properties = [];
  for (var key in obj) {
    if (!obj.hasOwnProperty("c")) {

      properties.push(key);
    }
  }
  return properties;

}

looping(letters);

6 个答案:

答案 0 :(得分:2)

我将!obj.hasOwnProperty("c")更改为obj.hasOwnProperty(key)。这将显示不属于原型的属性(我假设是使用obj.hasOwnProperty的目标)。如果像其他一些答案所假设的那样,您的目标是仅排除属性"c",则可以将条件更改为if ( key !== "c" )

var letters = function () {
  this.a = 5;
  this.b = 20;
};

letters.prototype = {
  c: 10
};

var letters = new letters();

function looping(obj) {
  var properties = [];
  for (var key in obj) {
    if (obj.hasOwnProperty(key)) {

      properties.push(key);
    }
  }
   return properties;

}

 looping(letters);

答案 1 :(得分:1)

我认为你想说的是这样的



var Letters = function() {
  this.a = 5;
  this.b = 20;
};

Letters.prototype = {
  c: 10
};

var letters = new Letters();

function looping(obj) {
  var properties = [];
  for (var key in obj) {
    if (key !== "c") {

      properties.push(key);
    }
  }
  return properties;

}

alert(looping(letters));




您还应该将构造函数字母更改为Letters,使用大写" l",并且不要对构造函数和实例使用相同的名称

答案 2 :(得分:0)

目前,您始终在检查您的对象是否具有拥有属性c。由于c位于您的字母实例的原型链中(顺便说一句,您将覆盖您的函数引用!),此检查将始终生成false

我不完全确定您是否只想明确排除原型链上的c,或者是否要从原型中排除所有属性?我将在以下代码中假设第一个选项:

var Letters = function () {
  this.a = 5;
  this.b = 20;
};

Letters.prototype = {
  c: 10
};

var myLetters = new Letters();

function looping(obj) {
  var properties = [];
  for (var key in obj) {
    if (key !== 'c' || obj.hasOwnProperty(key)) {
      properties.push(key);
    }
  }
  return properties;

}

looping(myLetters);

答案 3 :(得分:0)

for循环将遍历实际对象及其原型中的所有keys,并且您实际上是通过在{{1}中使用hasOwnProperty来破坏"c"否定它。所以obj.hasOwnProperty("c")根本没有效果。

正确的方法是:

hasOwnProperty

答案 4 :(得分:0)

hasOwnProperty方法不会在原型链中查找属性。而只需在中使用(如'c' in obj)。

答案 5 :(得分:0)

此处的问题是,您正在检查c中的obj是否属于false中的属性,而obj.hasOwnProperty("c")始终为function looping(obj) { var properties = []; for (var key in obj) { if(key !== "c") properties.push(key); } return properties; } ,因为您的对象不会有&#34; ownProperty &#34; c据我所知,通过原型功能。由于你否定了def putInExcel(outputt): i = 1790 while i < 1892: inputt = str(i) + '.txt' #Making text file name writefile = open(outputt) writer = csv.writer(writefile) with open(inputt) as file: #Separating each word and storing in list text = file.read().lower() text = re.sub('[^a-z\ \']+', " ", text) words = list(text.split()) for word in words: cnt[word] += 1 for key, count in cnt.iteritems(): #De-dent this block writer.writerow([key,count]) #Output both the key and the count writefile.close() i = i+1 这个表达式,它总是正确的,因此推送你的数组中的每个键。也许你想要这样的东西。

projectData.process - title
projectData.process - description
// etc.