Список всех свойств прототипа объекта Javascript
Есть ли другой способ поиска свойств прототипа объекта javascript. Допустим, мне это нравится.
function proton() {
this.property1 = undefined;
this.property2 = undefined;
};
proton.prototype = {
sample1 : function() {
return 'something';
},
sample2 : function() {
return 'something';
}
};
var my_object = new proton();
console.log(Object.keys(my_object));
возвращает [ "property1", "property2" ]
console.log(Object.getOwnPropertyNames(my_object));
возвращает [ "property1", "property2" ]
Но то, что я хочу напечатать, - это свойства прототипа объекта my_object.
['sample1', 'sample2']
Чтобы увидеть свойства прототипа этого объекта, мне нужно console.log(объект) и инструменты разработчика, я могу найти свойства этого объекта.
Но поскольку я использую сторонние библиотеки, такие как phaser.js, react.js, create.js
поэтому я не знаю список свойств прототипа созданного объекта из этих библиотек.
Есть ли какая-либо функция прототипа объекта для списка всех свойств прототипа объекта javascript?
Ответы
Ответ 1
Не прототипный метод, но вы можете использовать Object.getPrototypeOf
, чтобы пройти цепочку прототипов, а затем получить собственные имена свойств каждого из этих объектов.
function logAllProperties(obj) {
if (obj == null) return; // recursive approach
console.log(Object.getOwnPropertyNames(obj));
logAllProperties(Object.getPrototypeOf(obj));
}
logAllProperties(my_object);
С помощью этого вы также можете написать функцию, которая возвращает массив всех имен свойств:
function props(obj) {
var p = [];
for (; obj != null; obj = Object.getPrototypeOf(obj)) {
var op = Object.getOwnPropertyNames(obj);
for (var i=0; i<op.length; i++)
if (p.indexOf(op[i]) == -1)
p.push(op[i]);
}
return p;
}
console.log(props(my_object)); // ["property1", "property2", "sample1", "sample2", "constructor", "toString", "toLocaleString", "valueOf", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable"
Ответ 2
function prototypeProperties(obj) {
var result = [];
for (var prop in obj) {
if (!obj.hasOwnProperty(prop)) {
result.push(prop);
}
}
return result;
}
EDIT: это захватит все свойства, которые были определены для любого предка. Если вам нужен более подробный контроль над тем, что определено там, где предложение Берги хорошее.