for-in循环和替代的两种方法

<script>
    function Person() {
    }

    Person.prototype.name = "宏斌";
    Person.prototype.age = 21;
    Person.prototype.job = "students";
    Person.prototype.sayHello = function () {
        console.log("Hello "+this.name)
    };

    var person1 = new Person();
    person1.job = "software engineer";
    person1.sex = "body";
    for (var a in person1){
        console.log(a);
        //job
        //sex
        //name
        //age
        //sayHello
    }
    //for in 会返回所有能够通过对象访问的,可枚举的(enumerated)属性,包括实例中的也包括原型中的属性。屏蔽了原型中不可枚举的属性(即[[Enumerable]] : false的属性)的实例属性也会被for in返回,因为根据规定,所有开发人员定义的属性都是可枚举的--IE8即更早除外md..
    var personProperty = Object.keys(person1);//实例上的可枚举属性,不含原型上的
    console.log(personProperty);//["job", "sex"]
    console.log(Object.keys(Person.prototype));// ["name", "age", "job", "sayHello"]

    //Object.getOwnPrototypeNames()该方法用来获取所有的实例属性,不论是否可枚举
    var keys = Object.getOwnPropertyNames(Person.prototype);
    console.log(keys);//["constructor", "name", "age", "job", "sayHello"]

    //Object.keys() 和 Object.getOwnProttypeNames() 两种方法都可以代替for in循环使用

</script>

在这里插入图片描述

发布了40 篇原创文章 · 获赞 54 · 访问量 7382

猜你喜欢

转载自blog.csdn.net/printf_hello/article/details/104249086