讓我們想象一下,我們有一個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;
}
我將無法使用上面的代碼。你知道是否有可能獲得一個類的公共屬性而不創建它的一個實例?
「據我所知,'不'。」你需要能夠詢問「Prototype」,而且我不知道你會怎麼做。 。 。 –