面向对象编程

单例设计模式(singleton pattern)


var name = "陆相莹";
var age = 18;
var sex = "girl";

var name = "刘司南";
var age = 81;
var sex = "boy";

var person1={
    name:"陆相莹",
    age:18
};
var person2={
    name:"刘司南",
    age:81
};

1.表现形式

   var obj = {
       xxx:xxx,
       ...
   };

单例设计模型中,OBJ不仅仅是对象名,它被称为“命名空间[NameSpace]”,把描述事务的属性存放到命名空间中,多个命名空间是独立分开的,互不冲突(每个实例和每个实例之间互不影响)

2.作用

把描述同一件事务的属性和特征进行“分组、归类”(存储在同一个堆内存空间中),避免了全局变量之间的冲突和污染

3.单例设计模式命名的由来

每一个命名空间都是JS中Object这个内置基类的实例,而实例之间是相互独立互不干扰的,所以我们称它为“单例:单独的实例”

高级单例模式

模型:对象包在匿名自执行函数里返回

在给命名空间赋值的时候,不是直接赋值一个对象,而是先执行匿名函数,形成一个私有作用域AA(不销毁的栈内存),在AA中创建一个堆内存,把堆内存地址赋值给命名空间

var nameSpace = (function () {
    var n = 12;
    function fn() {
        //...
    }
    function sum() {

    }
    return {
        fn: fn,
        sum: sum
    }
})();

好处:我们完全可以在AA中创造很多内容(变量OR函数),哪些需要供外面调取使用的,我们暴露到返回的对象中(模块化实现的一种思想)

工厂模式(Factory Pattern)

function createPerson(name, age) {
    var obj = {};
    obj.name = name;
    obj.age = age;
    return obj;
}
var p1 = createPerson('xxx', 25);
var p2 = createPerson('xxx', 25);

 1.把实现相同功能的代码进行“封装”,以此来实现“批量生产”(后期想要实现这个功能,我们只需要执行函数即可)

 2.“低耦合高内聚”:减少页面中的冗余代码,提高代码的重复使用率

耦合是指某两个事物之间如果存在一种相互作用、相互影响的关系,

内聚 是一个模块内部各个元素彼此结合的紧密程度

面向对象理解

JS本身就是基于面向对象设计和开发出来的一门语言,在js中提供了很多的大类和小类,我们在来开发中都是基于类,基于实例完成的,所以说我们操作js就是在面线对象编程。

 

基于构造函数创建自定义类(constructor)

没有new 普通函数执行

有new    构造函数执行

构造函数执行,当前的函数名称之为“类名”,接收的返回结果是当前类的一个实例

在 JavaScript 中,判断一个变量的类型常常会用 typeof 运算符,在使用 typeof 运算符时采用引用类型存储值会出现一个问题,无论引用的是什么类型的对象,它都返回 “object”。ECMAScript 引入了另一个 Java 运算符 instanceof 来解决这个问题。instanceof 运算符与 typeof 运算符相似,用于识别正在处理的对象的类型。

typeof:判断基本变量的类型

instanceof:检测某一个实例是否隶属于这个类

普通函数执行

1.形成一个私有的作用域,形参赋值,变量提升

2.代码执行

3.栈内存释放问题

构造函数执行

代码执行前,创建一个堆内存,函数主体的this指向它

代码执行完,return ‘this地址’

若自己写了return 基本值不影响返回this,引用值则返回自己写的引用值

return;结束代码执行,不影响返回this

 原型prototype

  1.所有的函数数据类型都天生自带一个属性:prototype(原型),这个属性的值是一个对象,浏览器会默认给它开辟一个堆内存

  2.在浏览器给prototype开辟的堆内存中有一个天生自带的属性:constructor,这个属性存储的值是当前函数本身

  3.每一个对象都有一个__proto__的属性,这个属性指向当前实例所属类的prototype(如果不能确定它是谁的实例,都是Object的实例)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值