js:面向对象、构造函数

面向对象

面向过程的时候我们写代码的方式是获取元素、定义信号量、定义锁都是遇见需求就定义一个变量
但是 无法复用 并且主要就是定义的 是变量

面向对象就是操作的是对象
把写代码的风格从面向过程改为面向对象 把变量封装成对象即可

		//面向过程
        var username = "王老五";
        var age = 13;
        var sex = "男";
        console.log("大家好,我的名字是" + username + "我今年" + age + "岁,我是一个" + sex + "孩子")
		//面向对象
        var obj = {
            username: "王老五",
            age: 13,
            sex: "男"
        }
        console.log("大家好,我的名字是" + obj.username + "我今年" + obj.age + "岁,我是一个" + obj.sex + "孩子")
工厂模式

如何复用代码

        function createPeople() {
            var obj = {
                username: "王老五",
                age: 13,
                sex: "男"
            }
            return obj;
        }

        var o1 = createPerson();
        var o2 = createPerson();
        var o3 = createPerson();
        var o4 = createPerson();
		// 当然现在还欠缺一点
        // 现在所有的人都同一个属性对应同一个属性值

        var createPerson = function (username, age, sex) {
            return {
                username, age, sex
            }
        }
        var o1 = createPerson("张三", 13, "女")
        var o2 = createPerson("李四", 23, "女")
        console.log(o1, o2); 

以上就是面向对象了,其中这个封装出来的函数的作用是 创建对象 所以这种具备特定功能的函数 我们管他叫做工厂函数
这种书写代码的模式 就叫做工厂模式
工厂具备的特点:产品的结构是一致的 属性值是不同的

工厂模式的不足
		// 创建人的工厂
        var createPerson = function (username, age, sex) {
            return {
                username, age, sex
            }
        }
        var o1 = createPerson("张三", 13, "女")

        // 创建学生的工厂
        var createStudent = function (name, age, sex, grade) {
            return {
                name, age, sex, grade
            }
        }
        var s1 = createStudent("小华", 6, "男", 1);

两个工厂 生产出来的产品 无法通过代码来识别

typeof 与 instanceof

JS中类型分为 引用类型和值类型
typeof 可以识别值类型的数据的不同
如何区分引用类型的不同呢?
instanceof关键字用于区分引用数据类型的精确类型的
var arr = [];
console.log(arr instanceof Array)
var obj = {};
console.log(obj instanceof Object)

    instanceof的用法 
    对象 instanceof 类型
    如果返回的是真 说明 前面的对象是后面的类型
    如果返回的是假 说明 前面的对象不是后面的类型
    所有对象都是Object对象的后代,所以任何对象和Object做instanceof都会返回true

正则的补充

		//补充: 正则的new的用法
        var reg = /abc/g;
        var reg1 = new RegExp("abc", "g");
        console.log(reg, reg1)

        //如果正则中出现特殊字符
        var reg2 = /\w+/g;
        var reg3 = new RegExp("\\w+", "g");
        console.log(reg2, reg3)

构造函数

1、构造函数也是一个普通函数,创建方式和普通函数一样,但构造函数习惯上首字母大写

2、构造函数和普通函数的区别在于:调用方式不一样。作用也不一样(构造函数用来新建实例对象)

3、调用方式不一样。

 a. 普通函数的调用方式:直接调用 person();

 b.构造函数的调用方式:需要使用new关键字来调用 new Person();

4、构造函数的函数名与类名相同:Person( ) 这个构造函数,Person 既是函数名,也是这个对象的类名

5、内部用this 来构造属性和方法

function Person(name,job,age)
{
     this.name=name;
     this.job=job;
     this.age=age;
     this.sayHi=function()
         {
          alert("Hi")
         }
 } 

5、构造函数的执行流程

  A、立刻在堆内存中创建一个新的对象

  B、将新建的对象设置为函数中的this

  C、逐个执行函数中的代码

  D、将新建的对象作为返回值

6、普通函数例子:因为没有返回值,所以为undefined

7、构造函数例子:构造函数会马上创建一个新对象,并将该新对象作为返回值返回

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值