我一直在寻找一种方法来获取在Javascript中实现特定原型的所有对象。
我想要完成的是自动发现运行时可用的内容。我有一个基础Prototype,我们称之为“Widget”,我打算扩展它以制作各种类型的Widgets。我发现有几个站点讨论如何实现Java-esque Reflections API in JavaScript,我曾计划使用它来动态地提取各种Widgets的功能。我遗失的那篇文章是能够说“给我所有Widget
”的东西
对于show-and-tell部分,这就是我定义“Widget”的方式
Widget = function(document) {
if (document) {
this._type = document.type;
this._value = document.value;
}
};
Widget.prototype = {
get type() {
return this._type;
},
get value() {
return this._value;
},
set value(value) {
this._value = value;
},
get someCustomWidgetMethod() {
// Do something Widget-ish
}
};
Widget的扩展名:
MyWidget = function(document) {
Widget.apply(this,arguments);
this.type = "MyWidget";
// Custom stuff here
};
MyWidget.prototype = Object.create(Widget.prototype, {
// MyWidget's prototype extensions
});
MyWidget.prototype.constructor = MyWidget;
答案 0 :(得分:2)
类似的东西:
var ClassSystem = {
subClasses: [],
getByBaseClass: function (baseClass) {
return this.subClasses.filter(function (subClass) {
return (subClass.prototype instanceof baseClass);
});
},
extend: function (subClass, baseClass, config) {
subClass.prototype = Object.create(baseClass.prototype, config || {});
subClass.prototype.constructor = subClass;
this.subClasses.push(subClass);
return subClass;
}
};
用法:
// Base Class
function Widget() {}
Widget.prototype.sayHello = function () {
console.log('hello');
};
// Sub Class
function MyWidget() {}
// Inherit
ClassSystem.extend(MyWidget, Widget)
console.log(ClassSystem.getByBaseClass(Widget).length) // Will output 1
console.log(ClassSystem.getByBaseClass(Widget)) // Will output [MyWidget()]
只是一个非常简单的版本,您可以根据需要进行扩展。