Давайте представим, что у нас есть класс JavaScript:Получить общедоступные свойства класса без создания его экземпляра?
var Person = (function() {
function Person(name, surname) {
this.name = name;
this.surname = surname;
}
Person.prototype.saySomething = function (something) {
return this.name + " " + this.surname + " says: " + something;
};
return Person;
})();
Я хочу перебирать свои свойства и методы. У меня нет проблем с этими методами.
var proto = Person.prototype,
methods = Object.keys(proto);
// iterate class methods ["saySomething"]
for (var i = 0; i < methods.length; i++) {
// do something...
}
Моя проблема возникает, когда я хочу, чтобы перебирать свои свойства:
var proto = Person.prototype,
targetInstance = new Person(), // this is my problem!
properties = Object.getOwnPropertyNames(targetInstance),
// iterate class properties ["name", "surname"]
for (var i = 0; i < properties.length; i++) {
// do something...
}
Единственный способ, который я нашел, чтобы создать экземпляр и использовать Object.getOwnPropertyNames
. Я хочу использовать этот код как часть структуры, поэтому я не буду контролировать классы, определенные другими разработчиками. Я хочу, чтобы избежать необходимости создания экземпляра, потому что если конструктор имел какой-то проверки, как:
function Person(name, surname) {
if(typeof name === "undefined" || typeof surname === "undefined"){
throw new Error()
}
this.name = name;
this.surname = surname;
}
я не смог бы использовать код, указанный выше. Знаете ли вы, можно ли получить общедоступные свойства класса без создания его экземпляра?
«Насколько я знаю,« нет ».« Вы должны иметь возможность допросить «Прототип», и я не знаю, как вы это сделаете. , , –