0

プロパティ 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);
4

6 に答える 6

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" に変更し、コンストラクターとインスタンスの両方に同じ名前を使用しないでください。

于 2016-05-13T21:47:08.957 に答える
0

ここでの問題は、私が知る限り、プロトタイプ機能によってobj が " ownProperty " c を持たないため、常にc存在するプロパティとして存在するかどうかを確認していることです。式を否定しているため、常に真になり、配列内のすべてのキーをプッシュします。多分あなたはこのようなものが欲しいです。objfalseobj.hasOwnProperty("c")

function looping(obj) {
  var properties = [];
  for (var key in obj) {
    if(key !== "c") properties.push(key);
  }
  return properties;
}
于 2016-05-13T22:07:10.323 に答える