美文网首页
面向对象02-对象的创建

面向对象02-对象的创建

作者: 肉肉与马甲线的故事 | 来源:发表于2017-05-29 17:10 被阅读0次

对象的创建

  • 字面量
  • 内置构造函数(Object)
  • 工厂函数
  • 自定义构造函数
  • Object.create()

01 字面量方式创建对象

代码示例

var  book1 = {
        name:"声名狼藉者的生活",
        price:42.00,
        author:"福柯",
        press:"北京大学出版社",
        read:function () {
            console.log("我的书名为:声名狼藉者的的生活,作者为福柯....");
        }
    };

存在问题

  • 代码复用性差
  • 如果要创建大量的同类型对象,则需要些大量重复性代码

02 内置构造函数创建对象

  • 内置构造函数

    • String Number Boolean 注意:(区别于string number boolean)
    • Date Array Function Object RegExp....

代码示例

    var book1 = new Object();
    book1.name = "声名狼藉者的生活";
    book1.price = 42.00;
    book1.author = "福柯";
    book1.press = "北京大学出版社";
    book1.read = function () {
        console.log("我的书名为:声名狼藉者的的生活,作者为福柯....");
    };

问题

01 创建的对象无法复用,复用性差

02 如果需要创建多个同类型的对象,如(书籍)则需要写大量重复的代码,代码的冗余度高


03 简单工厂函数创建对象

代码示例

    function createBookNew (name,price,author,press) {

        var book = new Object();
        book.name = name;
        book.price = price;
        book.author = author;
        book.press = press;
        book.read = function () {
            console.log("我的书名为:"+book.name+",作者为"+book.author+"....");
        };

        return book;
    }

    //使用工厂函数来创建对象
    var book1 = createBookNew("声名狼藉者的的生活","42.00","福柯","北京大学出版社");
    var book2 = createBookNew("人性的枷锁","49.00","毛姆","华东师范大学出版社");
    var book3 = createBookNew("悟空传","28.00","今何在","湖南文艺出版社");

    //打印对象的属性,调用对象的方法
    console.log(book1.name);
    console.log(book2.name);
    console.log(book3.name);

    book1.read();
    book2.read();
    book3.read();

工厂函数创建对象说明
工厂函数方法其本质就是对内置构造函数创建对象的一个封装,适用于大批量创建同种类型的对象

    function createBook (name,price,author,press) {

        //001 参数 = 原料
        var book = new Object();

        //002 创建对象并设置对象的属性和方法 = 对原料进行加工
        book.name = name;
        book.price = price;
        book.author = author;
        book.press = press;
        book.read = function () {
            console.log("我的书名为:"+book.name+",作者为"+book.author+"....");
        };

        //003 把处理好的对象返回给我们 == 产品出厂
        return book;
    }

封装思路

使用函数把固定不变的部分封装起来,变化的部分提取为函数的参数

工厂函数创建对象的实现过程

① 提供一个创建对象的函数(参数)

② 在该函数内部使用new 关键字和Object构造器创建对象

③ 设置对象的属性

④ 设置对象的方法

⑤ 返回对象


04 自定义构造函数创建对象

构造函数与普通函数的区别:

  • 本质上没有区别
  • 构造函数一般首字母大写
  • 调用的时候,构造函数一般与new结合使用创建对象

核心过程:

01 提供一个(构造)函数

02 在函数通过this设置属性和方法

03 通过new 函数()创建对象

  • 内部实现具体过程

    • 默认在函数内部创建一个空对象 var o=new Object()
    • 将创建的新对象赋值给this this=o
    • 默认会把新创建的对象的原型对象设为当前构造函数的原型对象 o.proto=Person.prototype
    • 默认会设置新创建对象的构造器属性为当前构造函数 o.proto.constructor=Person
    • 通过this设置属性和方法
    • 默认会把新创建的对象返回 return o

代码示例

    function CreateBook (name,price,author,press) {
        this.name = name;
        this.price = price;
        this.author = author;
        this.press = press;
        this.read = function () {
            console.log("我的书名为:"+this.name+",作者为"+this.author+"....");
        };
    }

    var b1 = new CreateBook("声名狼藉者的的生活","42.00","福柯","北京大学出版社");
    var b2 = new CreateBook("人性的枷锁","49.00","毛姆","华东师范大学出版社");
    var b3 = new CreateBook("悟空传","28.00","今何在","湖南文艺出版社");

    //打印对象的属性,并调用对象的方法测试
    console.log(b1.author);
    console.log(b2.author);
    console.log(b3.author);
    b1.read();
    b2.read();
    b3.read();
    console.log(b1 == b2); // false,创建的对象为引用类型,存储的是地址,两次创建对象,存储的地址不同,自然不相等
    console.log(b1.read == b2.read); //false,同上
    

构造函数的返回值

01 如果在构造函数中没有显示的return,则默认返回的是新创建出来的对象

02 如果在构造函数中显示的return,则依照具体的情况处理

[01] return 的是对象,则直接返回该对象,取而代之本该默认 返回的新对象
[02] return 的是null或基本数据类型值,则返回新创建的对象

构造函数方式创建对象存在的问题

每次创建对象,都会重新创建函数,那么如果创建的对象数量很多,而对象方法内部的实现一模一样,则造成了资源浪费

相关文章

  • 面向对象02-对象的创建

    对象的创建 字面量 内置构造函数(Object) 工厂函数 自定义构造函数 Object.create() 01 ...

  • 面向对象——创建对象

    1.工厂模式 用函数来封装以特定接口创建对象的细节 工厂模式解决了创建多个相似对象的问题,但是没有解决对象识别的问...

  • 面向对象:创建对象&继承

    博客内容:什么是面向对象为什么要面向对象面向对象编程的特性和原则理解对象属性创建对象继承 什么是面向对象 面向对象...

  • 对象和面向对象的介绍

    对象分为 面向对象和基于对象: 面向对象:面向对象定义: 可以创建自定义类型、很好的支持继承和多态。面向对象的语言...

  • web-js-内置对象 面向对象

    内置对象 1、document 2、location 3、Math 面向对象 面向过程与面向对象编程 创建对象的方...

  • js原型链基础

    创建对象的方法: 面向对象

  • 02-面向对象

    类及对象 类的组成成分:属性(成员变量,Field)方法(成员方法,函数,Method) 属性成员变量 vs 局部...

  • PHP中的面向对象

    PHP面向对象的语法,面向对象只可意会不可言传,万物皆对象: 定义类 创建类对象(实例化) 使用对象 对象创建方式...

  • 12.5 使用面向对象 创建矩形

    这是一个 用 面向对象来 创建对象 的典型的列子 使用面向对象创建矩形 wi...

  • js面向对象

    面向对象铺垫-对象创建方式总结 第一种:创建对象的方式,json方式 第二种: 创建面向对象的方式: new Ob...

网友评论

      本文标题:面向对象02-对象的创建

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