使用Object.keys获取用于创建构造函数实例的属性,然后打印继承的属性

use Object.keys to get properties which are used to create instances of a constructor then prints inherited properties

本文关键字:属性 然后 继承 打印 实例 构造函数 keys Object 获取 用于 创建      更新时间:2023-09-26

我正在尝试使用Object.keys发送对象的属性,并将其存储在变量中。所以现在我有一个包含两个元素的数组,这两个元素应该是Person类的实例,并继承了name属性。但是arr[0]给了我p1,但相当于p1.namearr[0].name没有打印它的名称,但它不应该打印吗??我想知道幕后发生了什么??谢谢

(function(){
function Person(name){
   this.name=name;
}
var obj={
 'p1':new Person('person1'),
 'p2':new Person('person2')
};
var arr=Object.keys(obj);
console.log(arr[0].name);
})();

arr是值为["p1", "p2"]的字符串数组(或可能["p2", "p1"],因为对象属性没有排序)。因此,arr[0].name等价于"p1".name,这毫不奇怪地给出了undefined的结果。

Object.keys(obj)返回字符串数组,其中每个字符串都是obj上的属性名称。这里,obj有两个属性,p1p2,所以Object.keys(obj)返回一个带有两个字符串的数组。

相反,做obj[arr[0]].name,或者更干净:

var indexZeroPropertyName = arr[0];
var firstObject = obj[indexZeroPropertyName];
console.log(firstObject.name)