構造函數及原型

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <h2>面向對象</h2>
    <pre>
        一切皆爲對象
        對象是類的一個實例,對象有屬性和方法,對象表示屬性的無序集合

        聲明對象
        var person = {
            name: "張三",
            age: 20
        }

        2.構造函數建立對象
            用來建立對象的函數
            與普通函數的區別:
                首字母大寫
                裏面的this所指的是實例對象
                沒有return語句,直接返回對象
                調用構造函數時,new會自動建立this對象,且類型就是構造函數類型

            對象有一個constructor屬性,指向他的構造函數

        3.prototype原型模式
            javascript裏面,每個構造函數都有一個prototype屬性,指向另外一個對象,這個對象的全部屬性和方法都會被構造函數的實例繼承

            因此,咱們能夠把那些不變的屬性和方法定義在prototype對象上。

 輔助方法:
                isPrototypeOf()   判斷對象是否繼承了構造函數的prototype屬性
                hasOwnProperty()
                用來判斷某一個屬性是本身的屬性仍是prototype的屬性
                    若是是本身的,則返回true
                    若是是繼承prototype的,則返回false

                delete      刪除屬性

                in          用來判斷某個實例是否含有某個屬性
                            還能夠遍歷某個對象的屬性



    </pre>
    <script>
        var person = {
            name: "張三",
            age: 20,
            show: function(){
                alert(this.name)
            }
        }
        person.height = "180";
        // person.show();
        // alert(person.height);
        //alert(person.name)
        

        //經過構造函數來建立對象
        function Person(name,age){
            this.name = name;
            this.age = age;

            //this.type = "人類";
        }

        Person.prototype.type = "人類";
        Person.prototype.sayHi = function(){
            alert("hello!");
        }

        var p1 = new Person("張三", 20);
        p1.type = "黃種人";


        var p2 = new Person("李四", 23);

        //alert(p1.constructor == p2.constructor);
        //alert(p1.type) //黃種人
        //console.log(p1)

        // p1.sayHi();
        // p2.sayHi();
        
        //alert(Person.prototype.isPrototypeOf(p1));//true
    
        //alert(p2.hasOwnProperty("type"));
        
        // delete p1.type;
        // alert(p1.type); //人類

        // alert("type" in p1); //true
        


        for(var k in p1){
            console.log(k+":" + p1[k])
        }
        // 輸出

        /*name:張三
        age:20
        type:人類
        sayHi:function (){
            alert("hello!");
        }*/

    </script>
</body>
</html>
相關文章
相關標籤/搜索