美文网首页
01.工厂函数和构造函数

01.工厂函数和构造函数

作者: Fl_来看看 | 来源:发表于2019-06-06 01:10 被阅读0次

    1.什么是工厂函数?

    工厂函数就是专门用于创建对象的函数, 我们就称之为工厂函数
    

    2.有什么用?

    先看不用工厂函数创造对象的做法

     let obj1 = {
                name: "lnj",
                age: 33,
                say: function () {
                    console.log("hello world");
                }
            };
            let obj2 = {
                name: "zs",
                age: 44,
                say: function () {
                    console.log("hello world");
                }
            };
    

    这样子批量创造对象简直要命!
    运用工厂函数后:

    function createPerson(myName, myAge) {
               let obj = new Object();
                obj.name = myName;
                obj.age = myAge;
                obj.say = function () {
                    console.log("hello world");
                }
                return obj;
            }
            let obj1 = createPerson("lnj", 34);
            let obj2 = createPerson("zs", 44);
            console.log(obj1);
            console.log(obj2);
    

    注意看流程
    工厂函数没有用this的,最后还要返回一个object

    1.什么是构造函数
    构造函数和工厂函数一样, 都是专门用于创建对象的,构造函数本质上是工厂函数的简写

      function Person(myName, myAge) {
                // let obj = new Object();  // 系统自动添加的
                // let this = obj; // 系统自动添加的
                this.name = myName;
                this.age = myAge;
                this.say = function () {
                    console.log("hello world");
                }
                // return this; // 系统自动添加的
            }
    

    1.当我们new Person("abc", 34);系统做了什么事情
    - 会在构造函数中自动创建一个对象
    - 会自动将刚才创建的对象赋值给this
    - 会在构造函数的最后自动添加return this;

    上面那样写,其实有性能问题的,有什么性能问题?由于两个对象中的say方法的实现都是一样的, 但是保存到了不同的存储空间中

    可以用Person.prototype 保存实例共用的东西,节省内存

     function Person(myName, myAge) {
                // let obj = new Object();  // 系统自动添加的
                // let this = obj; // 系统自动添加的
                this.name = myName;
                this.age = myAge;
                // this.say = fns.mySay;
                // return this; // 系统自动添加的
            }
            Person.prototype = {
                say: function () {
                    console.log("hello world");
                }
            }
            let obj1 = new Person("lnj", 34);
            obj1.say();
            let obj2 = new Person("zs", 44);
            obj2.say();
            console.log(obj1.say === obj2.say); // true
    

    关于prototype 见下篇。

    相关文章

      网友评论

          本文标题:01.工厂函数和构造函数

          本文链接:https://www.haomeiwen.com/subject/jqwexctx.html