美文网首页
hasOwnProperty和in属性操作

hasOwnProperty和in属性操作

作者: 码农的世界你不懂 | 来源:发表于2017-02-25 14:58 被阅读0次

    in操作符

    用来检查对象中是否存在某个属性(不区分实例属性和原型属性)

    <script>
    
        //01 提供一个构造函数
        function Person(name) {
            this.name = name;
        }
    
        //02 设置构造函数的原型对象的属性
        Person.prototype.sayHello = function () {
            console.log("hello");
        }
    
        //03 创建对象
        var p1 = new Person();
    
        //04 使用in关键字判断对象中是否存在以下属性:name age sayHello
        console.log("age" in p1);       //false
        console.log("name" in p1);      //true
        console.log("sayHello" in p1);  //true
    
    </script>
    
    

    hasOwnProperty方法

    <script>
    
        //01 提供一个构造函数
        function Person(name) {
            this.name = name;
        }
    
        //02 设置构造函数的原型对象的属性
        Person.prototype.sayHello = function () {
            console.log("hello");
        }
    
        Person.prototype.des = "默认的描述信息";
    
        //03 创建对象
        var p1 = new Person();
    
        //04 使用hasOwnProperty方法判断该属性是否是对象的实例属性
        console.log(p1.hasOwnProperty("age"));       //false
        console.log(p1.hasOwnProperty("name"));      //true
        console.log(p1.hasOwnProperty("sayHello"));  //false
        console.log(p1.hasOwnProperty("des"));       //false
    
    </script>
    
    • 说明:in关键字用来检查对象中是否存在指定的属性(包含实例属性和原型属性)
      对象的hasOwnProperty方法用来检查对象中是否存在指定的属性(只检查实例属性)

    • 要求:检查对象中是否存在某个原型属性(注意:该原型属性没有对应的实例属性)

      • 解决思路 :
        ① 属性存在于对象中
        ② 属性不是实例属性

    某个属性是否存在且只存在于原型属性中

    <script>
    
        //01 提供一个构造函数
        function Person(name) {
            this.name = name;
        }
    
        //02 设置构造函数的原型对象的属性
        Person.prototype.sayHello = function () {
            console.log("hello");
        };
    
        Person.prototype.des = "默认的描述信息";
    
        //03 创建对象
        var p1 = new Person();
    
    
        function isProperty(obj, property) {
            return !obj.hasOwnProperty(property) && (property in obj);
        }
    
        console.log(isProperty(p1, "constructor"));    //true
        console.log(isProperty(p1, "age"));            //false
        console.log(isProperty(p1, "name"));           //false
        console.log(isProperty(p1, "des"));            //true
        console.log(isProperty(p1, "sayHello"));        //true
        console.log(p1);
    
    </script>
    

    • 构造器属性

      • 使用构造函数创建对象,则

      • 原型对象中的constructor属性指向对应的构造函数

      • 实例对象中的constructor指向对应的构造函数,其中这里的constructor就是从原型中获取的

      • 即constructor时实例对象中的原型属性,而非实例属性

    相关文章

      网友评论

          本文标题:hasOwnProperty和in属性操作

          本文链接:https://www.haomeiwen.com/subject/jrxnwttx.html