草庐IT

OOP in JavaScript

Js是函数式语言,并不是传统的面对对象语言,如Java等等,所以在js中有一些比较独特的面对对象实现方法。面对对象有多个特点,如封装,继承,多态等,由于js的oop特性并不明显,所以仅叙述继承在js中的实现。众所周知,js中函数也可以是类,通过new在堆中手动开辟空间就是对象的实例,而且,每个对象都天生有一个指针,指向原型,原型也可以理解为一个对象,可以定义自己的方法,如下图所示,不再赘述,详细可以参考廖雪峰教程。functionPerson(name){this.name=name||'unnamed';}functionStudent(name,grade){Person.call(thi

Vue3 SFC 和 TSX 方式自定义组件实现 v-model

1v-model1.1理解v-modelv-model是vue3中的一个内置指令,很多表单元素都可以使用这个属性,如input、checkbox等,咱可以在自定义组件中实现v-model。v-model本质上是一个语法糖:绑定父组件传递过来的modelValue属性;值改变时向父组件发出事件update:modelValue。1.2案例描述理解了v-model的本质,咱可以分别使用SFC(.vue文件)和TSX(.tsx)方式定义一个组件person-name,使该组件可以使用v-model。person-name包括两个输入框,分别是“姓”(familyName)和“名”(firstName

Vue3 SFC 和 TSX 方式自定义组件实现 v-model

1v-model1.1理解v-modelv-model是vue3中的一个内置指令,很多表单元素都可以使用这个属性,如input、checkbox等,咱可以在自定义组件中实现v-model。v-model本质上是一个语法糖:绑定父组件传递过来的modelValue属性;值改变时向父组件发出事件update:modelValue。1.2案例描述理解了v-model的本质,咱可以分别使用SFC(.vue文件)和TSX(.tsx)方式定义一个组件person-name,使该组件可以使用v-model。person-name包括两个输入框,分别是“姓”(familyName)和“名”(firstName

vue3中markRaw的使用

markRaw作用:标记一个对象,使其永远不会再成为响应式对象应用场景:1.有些值不应被设置成响应式时,例如复杂的第三方类库等2.当渲染具有不可变数据源的大列表时,跳过响应式转换可以提高性能3.在动态渲染组件的时候我们就可以使用markRaw包裹。markRaw的使用场景很多时候,我们会遇见这样的场景。有一个响应式对象person。这个响应式对象有很多的属性。但是呢?个别属性是不需要响应式的。比如爱好markRaw的使用姓名:{{person.name}}性别:{{person.sex}}爱好:{{person.likes}}按钮import{reactive,markRaw}from'vue

vue3中markRaw的使用

markRaw作用:标记一个对象,使其永远不会再成为响应式对象应用场景:1.有些值不应被设置成响应式时,例如复杂的第三方类库等2.当渲染具有不可变数据源的大列表时,跳过响应式转换可以提高性能3.在动态渲染组件的时候我们就可以使用markRaw包裹。markRaw的使用场景很多时候,我们会遇见这样的场景。有一个响应式对象person。这个响应式对象有很多的属性。但是呢?个别属性是不需要响应式的。比如爱好markRaw的使用姓名:{{person.name}}性别:{{person.sex}}爱好:{{person.likes}}按钮import{reactive,markRaw}from'vue

SpringBoot整合Redis--RedisTemplate

SpringBoot整合Redis--RedisTemplate1、导入依赖org.springframework.bootspring-boot-starter-data-redis2、编写配置文件spring:redis:host:192.168.27.132port:6379password:lzyredisdatabase:1jedis:pool:max-active:10max-wait:3000min-idle:5max-idle:103、测试代码RedisTemplate.opsForXxx().操作Xxx:代表要操作的数据类型【value代表操作的是string】@Spring

SpringBoot整合Redis--RedisTemplate

SpringBoot整合Redis--RedisTemplate1、导入依赖org.springframework.bootspring-boot-starter-data-redis2、编写配置文件spring:redis:host:192.168.27.132port:6379password:lzyredisdatabase:1jedis:pool:max-active:10max-wait:3000min-idle:5max-idle:103、测试代码RedisTemplate.opsForXxx().操作Xxx:代表要操作的数据类型【value代表操作的是string】@Spring

Java原生序列化与反序列化

序列化与反序列化Java序列化是指把Java对象转换为字节序列的过程;而Java反序列化是指把字节序列恢复为Java对象的过程。为什么需要序列化?序列化分为两大部分:序列化和反序列化。序列化是这个过程的第一部分,将数据分解成字节流,以便存储在文件中或在网络上传输。反序列化就是打开字节流并重构对象。对象序列化不仅要将基本数据类型转换成字节表示,有时还要恢复数据。恢复数据要求有恢复数据的对象实例。序列化为什么会产生安全问题?只要服务端反序列化数据,客户端传递类的readObject中代码会自动执行,给予攻击者在服务器上运行代码的能力。Java序列化基本流程有如下三个文件,Person.java:i

Java原生序列化与反序列化

序列化与反序列化Java序列化是指把Java对象转换为字节序列的过程;而Java反序列化是指把字节序列恢复为Java对象的过程。为什么需要序列化?序列化分为两大部分:序列化和反序列化。序列化是这个过程的第一部分,将数据分解成字节流,以便存储在文件中或在网络上传输。反序列化就是打开字节流并重构对象。对象序列化不仅要将基本数据类型转换成字节表示,有时还要恢复数据。恢复数据要求有恢复数据的对象实例。序列化为什么会产生安全问题?只要服务端反序列化数据,客户端传递类的readObject中代码会自动执行,给予攻击者在服务器上运行代码的能力。Java序列化基本流程有如下三个文件,Person.java:i

C++基础-类与对象(1)

C++类与对象(1)类的设计:可以把属性和行为放在不同的权限下struct和class区别在于某人的访问权限不同struct:默认共有class:默认私有对象的初始化和清理如果我们不写,系统会自己给我没写构造函数的语法类名(){}没有返回值,也不写void函数名和类型相同可以有参,也可以无参在调用对象会自动调用函数,无需手动调用,只调用一次析构函数语法~类名(){}同上,不过是无参(不可以重载),销毁时自动调用函数,只调用一次构造函数的分类与调用分类有参和无参(默认)普通和拷贝拷贝函数函数名(const函数名&p(对象)){age=p.age;}#include//构造函数和析构函数using