我正在尝试排除属性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);发布于 2016-05-14 05:47:43
我将!obj.hasOwnProperty("c")更改为obj.hasOwnProperty(key)。这将显示不只属于原型的属性(我认为这是您使用obj.hasOwnProperty的目标)。如果像其他一些答案假设的那样,您的目标是只排除属性"c",那么您可以将If condition更改为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);发布于 2016-05-14 05:47:09
我想你想说的是这样的
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-14 05:47:37
目前,您总是在检查您的对象是否有自己的属性c。由于c在您的letters实例的原型链中(顺便说一句,您用它覆盖了您的函数引用!),因此此检查将始终导致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);https://stackoverflow.com/questions/37219742
复制相似问题