还有其他方法可以查找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 所以我不知道这个库中创建对象的原型属性列表。
是否有任何Object的原型函数列出javascript对象的所有prototpye属性?
答案 0 :(得分:32)
不是原型方法,但您可以使用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"
答案 1 :(得分:8)
function prototypeProperties(obj) {
var result = [];
for (var prop in obj) {
if (!obj.hasOwnProperty(prop)) {
result.push(prop);
}
}
return result;
}
编辑:这将获取在任何祖先上定义的所有属性。如果你想更精细地控制定义的位置,Bergi的建议是好的。