zoukankan      html  css  js  c++  java
  • 创建函数及创建对象的方式

    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);
  • 相关阅读:
    SqlServer Alwayson 搭建排错记录(一)
    SqlServer图形数据库初体验
    SqlServer报错:主体“dbo”不存在
    IIS重叠回收
    No module named 'revoscalepy'问题解决
    SqlServer查询文件组被占用情况
    SqlServer作业指定目标服务器
    [持续更新]UnsatisfiedLinkError常见问题及解决方案
    Android加载SO库UnsatisfiedLinkError错误的原因及解决方案
    _set_invalid_parameter_handler异常处理函数
  • 原文地址:https://www.cnblogs.com/de1921/p/13130829.html
Copyright © 2011-2022 走看看