Cela ne fonctionne que dans les navigateurs modernes (Chrome, Firefox 4+, IE9 +), mais dans ECMAScript 5, vous pouvez obtenir toutes les propriétés d'un objet avec Object.getOwnPropertyNames
. Il suffit d'un petit code supplémentaire pour obtenir les propriétés héritées du prototype.
// Put all the properties of an object (including inherited properties) into
// an object so they can be iterated over
function getProperties(obj, properties) {
properties = properties || {};
// Get the prototype's properties
var prototype = Object.getPrototypeOf(obj);
if (prototype !== null) {
getProperties(prototype, properties);
}
// Get obj's own properties
var names = Object.getOwnPropertyNames(obj);
for (var i = 0; i < names.length; i++) {
var name = names[i];
properties[name] = obj[name];
}
return properties;
}
function iterate(obj) {
obj = Object(obj);
var properties = getProperties(obj);
for (var name in properties) {
if (typeof properties[name] !== "function") {
console.log("property: " + name);
}
}
for (var name in properties) {
if (typeof properties[name] === "function") {
console.log("function: " + name);
}
}
}
Il semble que l'exécution de votre exemple fonctionne. Cependant, quand j'ai utilisé la classe String, elle n'a rien retourné. itérer (Chaîne); J'ai également essayé: var s = "sss"; itérer (s); – Amir
Lorsque vous itérez une chaîne, elle parcourt chaque caractère. Essayez de passer String (s) à la place, pour envelopper la chaîne dans un objet. – devios1