从JavaScript对象中获取反射非常容易,就像下面的代码一样。
var getAllMembers = function (obj) {
var members = {};
members.properties = [];
members.methods = [];
for (var prop in obj) {
if (typeof obj[prop] != 'function')
members.properties.push(prop);
else members.methods.push(prop);
}
return members;
}
function demo_class(na, nb) {
this.a = na;
this.b = nb;
this.funca = function () {
console.log(this.a);
}
this.funcb = function () {
console.log(this.b);
}
}
var x = new demo_class(1234, 4321);
var members = getAllMembers(x);
console.log(members.properties); // [ 'a', 'b' ]
console.log(members.methods); // [ 'funca', 'funcb' ]
我的问题是:有没有办法从类或函数中获取属性和方法,而不是从对象中获取?例如,像这样:
var members = getAllMembers(demo_class); // Only can get '[] []'
答案 0 :(得分:0)
在Javascript中,一切都是对象。它不存在类概念。因此,每次使用new运算符(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/new)时,它都会使用函数作为构造函数返回一个对象。
您可以使用Prototype概念得到近似值。您在原型中定义方法而不是构造函数本身。
function Person(name, family) {
this.name = name;
this.family = family;
}
Person.prototype.getFull = function() {
return this.name + " " + this.family;
};
这是一篇解释它的帖子https://www.thecodeship.com/web-development/methods-within-constructor-vs-prototype-in-javascript/
答案 1 :(得分:0)
在javascript中没有真正的类概念,因为它是一种原型语言。函数是一个对象。
您可以做的是测试您的对象是否具有命名函数构造函数,以测试它是否是由函数构造的对象。如果没有,您可以创建一个实例来获取您已经执行过的属性:
注意:只有在使用通过关键字函数定义的类构造函数(不是通过另一个命名函数构造)时,这才有效。如果不使用@Transactional
函数,您的函数也将从原型链中获取所有继承的属性。
hasOwnProperty()