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 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM