1. 90前端首页
  2. 前端开发
  3. JavaScript

获取对象上属性和方法的几种常用方式

构造函数创建一个对象实例,该实例包括自身属性方法,和原型上的方法。

function Person(name, age) {
    this.name = name;
    this.age = age;
    this.say = function() {
        console.log(this.name, this.age);
    }
}
Person.prototype.hello = function() {
    console.log(this.name, \'hello\');
}
let xm = new Person(\'xm\', 19);

方法1:for...in

let propArr = [];
for(let i in xm) {
    propArr.push(i);
}
propArr;    //[\"name\", \"age\", \"say\", \"hello\", \"type\"]

for...in方法会循环遍历对象的所有属性和方法,包括自身属性方法和原型上的属性方法。并且只遍历对象中可枚举的属性(enumerate为true)。

方法2:Object.keys(...)

let propArr = Object.keys(xm);    //[\"name\", \"age\", \"say\"]

该方法只能获取对象自身可枚举的属性和方法,不能获取原型上的属性和方法。

方法3:Object.getOwnPropertyNames(...)

let propArr = Object.getOwnPropertyNames(xm);    //[\"name\", \"age\", \"say\"]

该方法只能获取对象自身所有的属性和方法,不能获取原型上的属性和方法。

扩展:如何获取对象原型上的属性和方法?

方法1:for...in

let propProto = [];
for(let i in xm.__proto__) {
    propProto.push(i);
}
console.log(propProto);   //[\"hello\", \"type\"]

方法2:对象所有属性方法和自身属性方法的数组集合求差

let propAll = [];
for(let i in xm) {
    propAll.push(i);
}
let propOwn = Object.keys(xm);
let propProto = propAll.filter(function(item) {
    return (propOwn.indexOf(item)<0);
});
console.log(propProto);   //[\"hello\", \"type\"]

本文来自网络整理,转载请注明原出处:https://segmentfault.com/a/1190000022029605

展开阅读全文

发表评论

登录后才能评论