zoukankan      html  css  js  c++  java
  • JS中isPrototypeOf 和hasOwnProperty 的区别 ------- js使用in和hasOwnProperty获取对象属性的区别

    JS中isPrototypeOf 和hasOwnProperty 的区别

    1、isPrototypeOf 
    isPrototypeOf是用来判断指定对象object1是否存在于另一个对象object2的原型链中,是则返回true,否则返回false。 
    格式如下: 
    object1.isPrototypeOf(object2); 
    object1是一个对象的实例; 
    object2是另一个将要检查其原型链的对象。 
    原型链可以用来在同一个对象类型的不同实例之间共享功能。 
    如果 object2 的原型链中包含object1,那么 isPrototypeOf 方法返回 true。 
    如果 object2 不是一个对象或者 object1 没有出现在 object2 中的原型链中,isPrototypeOf 方法将返回 false。 

    2、hasOwnProperty 
    hasOwnProperty判断一个对象是否有名称的属性或对象,此方法无法检查该对象的原型链中是否具有该属性,该属性必须是对象本身的一个成员。 
    如果该属性或者方法是该 对象自身定义的而不是器原型链中定义的 则返回true;否则返回false; 
    格式如下: 
    object.hasOwnProperty(proName); 
    判断proName的名称是不是object对象的一个属性或对象。

    本文转自:http://www.cnblogs.com/ppforever/p/3921481.html

    致力于前端开发的知识分享
     
     

    js使用in和hasOwnProperty获取对象属性的区别

    in判断的是对象的所有属性,包括对象实例及其原型的属性; 
    而hasOwnProperty则是判断对象实例的是否具有某个属性。

    示例代码:

    <script type="text/javascript">
        function Person(){
            }
            Person.prototype.name = "allen";
    
            var person = new Person();
            console.log(person.hasOwnProperty("name")); //false
            console.log("name" in person); //true
            console.log(person.name); //"allen"
    
            person.name = "justforse";
            console.log(person.hasOwnProperty("name")); //true
            console.log("name" in person); //true
            console.log(person.name); //"justforuse"
    
            delete person.name;
            console.log(person.hasOwnProperty("name")); //false
            console.log("name" in person); //true
            console.log(person.name); //"allen"
    </script>

    以上代码执行的时候,name属性要么是从实例中获取的,要么是来源于原型,所以使用in 来访问 name属性始终返回true;而hasOwnProperty()只在属性存在与对象实例中时才返回true,当删除了实例中的name属性后,就恢复了原型中name属性的连接,所以返回allen。



    此文档的作者:justforuse 
    Github Pages:justforuse 
  • 相关阅读:
    mac os programming
    Rejecting Good Engineers?
    Do Undergrads in MIT Struggle to Obtain Good Grades?
    Go to industry?
    LaTex Tricks
    Convert jupyter notebooks to python files
    How to get gradients with respect to the inputs in pytorch
    Uninstall cuda 9.1 and install cuda 8.0
    How to edit codes on the server which runs jupyter notebook using your pc's bwroser
    Leetcode No.94 Binary Tree Inorder Traversal二叉树中序遍历(c++实现)
  • 原文地址:https://www.cnblogs.com/jiangxiaobo/p/6243993.html
Copyright © 2011-2022 走看看