构造函数及原型

<!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>
原文地址:https://www.cnblogs.com/wenyang/p/6119645.html