创建函数及创建对象的方式

1.创建函数的方式

     // 1.命名函数
        function fun1() {
            console.log("这是第一种方式");
        }
        // 2.匿名函数
        var fun2 = function () {
            console.log("第二种方式--匿名函数也称为函数表达式");
        }
        // 3.这种方式创建的函数在函数外只能用fun3调用,fun4只能在函数内部使用
        var fun3 = function fun4() {
            console.log("这是第三种方式--命名函数表达式");
        }
        // 4.通过new和Function创建函数--这种方式创建的是匿名函数--可以写函数体
        var fn = new Function("a", "a", "b", "return a + a + b;");
        var result = fn(1, 2, 3);//7,如果形参相同 调用时传递的实参 后面的实参会把前面的覆盖 ---在这里2把1覆盖了
        console.log(result);

2.创建对象的方式

     // 1.字面量方式创建
        var obj1 = {};//创建一个内容为空的对象

        // 2.通过内置构造函数方式创建   ---存在问题:第一和第二种方式会存在大量的代码
        var obj2 = new Object();

        // 3.工厂模式---将内置构造函数的方式封装   ---存在问题:无法判断创建出来的对象类型
        function createPerson(name, age) {
            var obj3 = new Object();
            obj3.name = name;
            obj3.age = age;

            return obj3;
        }
        var per = new createPerson("lily", 20);
        console.log(per instanceof createPerson); //false

        // 4.自定义构造函数方式创建
        //存在问题:每次实例化一个对象,都会在内存中开辟一块空间存储数据,
        //但是存储的方法在每个对象中是相同的,这样的存储方式会增大内存消耗---因此方法一般放在原型对象上共享
        function Animal(name, age) {
            this.name = name;
            this.age = age;
            // this.show = function () { //方法一般放在原型对象上
            //     console.log(this.name, this.age);
            // }
            // 默认返回this
        }
        var an = new Animal("dahuang", 2);
        // an.show();
        /* 
            自定义构造函数的创建和封装:
            1.在函数内部默认会创建一个 var obj = new Object();
            2.默认把创建好的对象赋值给this this = obj;
            3.默认设置this的原型对象为当前构造函数的原型对象;
            4.通过this添加属性和方法;
            5.默认把内部创建的对象返回 return this;
         */

        // 5.通过Object.create()方式创建 
        // 可以接收的参数有两种情况: 
        // 1.null 创建一个空对象,这对象连最基本的原型对象都没有
        // 2.对象作为参数,将传递进来的参数作为当前对象的原型对象
        var obj5 = Object.create(null);//创建一个没有原型对象的对象
        console.log(obj5);
        var obj6 = { name: "aa", code: 101210 };
        var obj7 = Object.create(obj6);//将obj6作为obj7的原型对象
        console.log(obj7);

        // 6.通过Object.assign()方式创建
        // 将多个对象合并为一个对象,如果合并的时候出现属性相同 后面的属性会覆盖前面的
        var obj9 = { name: "zth", age: 25 };
        var obj10 = { name: "lyf", address: "****" };
        var obj8 = Object.assign(obj9, obj10); //后面的name属性会覆盖前面的name
        console.log(obj8);

 

posted @ 2020-06-15 14:40  养猪的狗子  阅读(366)  评论(0编辑  收藏  举报