首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

编写高质量可维护代码:编程范式

由于 JS 对象传递是引用地址,即使我们使用 const 关键词声明对象,它依旧是可以变。这样就会导致我们可能会随意修改对象。...static 表示静态方法,静态方法只属于 Zcy 这个,所以当 member 调用 soCute 方法,控制台报错。...多态表现方式有重写,重载和接口,原生 JS 能够实现多态只有重写重写重写是子类可继承父方法,而不需要重新编写相同方法。...但有时子类并不想原封不动地继承父方法,而是想作一定修改,这就需要采用方法重写方法重写又称方法覆盖。...zooTeam.getName(); // yuyu ZooTeam 为了满足自己需求,继承了父 doSomething 方法重写了 doSomething 方法,所以调用 doSomething

48820

mobx 入门

, 通过对可观察对象监控,当数据变化做出对应动作,所以可以大概归纳为: 构建观察对象 设置响应动作 在mobx构建观察对象存在两种模式 函数模式 装饰器模式(针对定义) 函数模式 创建观察对象...,而非我们创建传入值, 我们可能修改保存观察对象变量,这是将丢失观察对象...., 当观察对象值变化后,产生值 响应规则与 autorun 类似, 只对函数内值作响应 computed(get, set) // get: 获取值函数 // set: 设置值函数 import...true 执行, 只执行一次 const Rogan = observable({ name: 'Rogan', age: 100 }) // when 将返回终止函数,调用终止函数后...24 // -> coco 30 warpChange('jeck', 11) // 只触发一次 autorun // -> jeck 11 装饰器模式 多数情况下,mobx 配置和 react 使用

99420
您找到你想要的搜索结果了吗?
是的
没有找到

Java只有按值传递,没有按引用传递!

num作为参数传递给changeValue()方法,是将内存空间中num所指向那个存储单元存放值,即"5",传送给了changeValue()方法x变量,而这个x变量也在内存空间中分配了一个存储单元...当一个对象实例作为一个参数被传递到方法,参数值就是该对象引用一个副本。指向同一个对象,对象内容可以在被调用方法改变,但对象引用(不是引用副本)是永远不会改变。...是该实体对象起始地址;而右侧是栈空间,用来给引用变量和一些临时变量分配内存,实体对象引用person就在其中,可以看到它存储单元内容是000012,记录正是新建Person实体对象起始地址...person引用变量将自己存储单元内容传给了changeName()方法p变量!...也就是将实体对象地址传给了p变量,从此,在changeName()方法对p一切操作都是针对p所指向这个存储单元,与person引用变量所指向那个存储单元再没有关系了!

1.1K90

JAVA值传递和引用传递

num作为参数传递给changeValue()方法,是将内存空间中num所指向那个存储单元存放值,即"5",传送给了changeValue()方法x变量,而这个x变量也在内存空间中分配了一个存储单元...是该实体对象起始地址;而右侧是栈空间,用来给引用变量和一些临时变量分配内存,实体对象引用person就在其中,可以看到它存储单元内容是000012,记录正是新建Person实体对象起始地址...这时候,好戏上台了: 调用changeName()方法,person作为对象参数传入该方法,但是大家特别注意,它传入是什么!!!...person引用变量将自己存储单元内容传给了changeName()方法p变量!...也就是将实体对象地址传给了p变量,从此,在changeName()方法对p一切操作都是针对p所指向这个存储单元,与person引用变量所指向那个存储单元再没有关系了!

1.6K90

原生JS | 值类型与引用类型变量

HTML5学堂-码匠:在JavaScript,存在着两种不同变量类型,一种是值类型变量,一种是引用类型变量。...实例1运行后,控制台打印结果为: HTML5学堂 码匠 实例2运行后,控制台打印结果为: 码匠 码匠 两种实例不同结果“根源” 导致这两种不同结果根源在于JavaScript变量类型分为两大类...对于值类型变量变量交换(将一个变量赋值给另一个变量)相当于是创建了一个空间,把原有的变量值复制一份,并将其存储在空间当中,空间与之前空间互不影响。...引用类型变量 引用类型包括:对象、数组、函数。 引用类型变量交换,并不会创建一个空间,而是让变量和之前变量,同时指向一个原有空间(即同一个地址)。可以理解为C语言指针。...代码实例 - A function changeName(username){ username = '码匠'; } var username = 'HTML5学堂'; changeName(username

3.4K90

用画小狗方法来解释Java值传递

问题就出在方法调用上,当我执行changeName(myDog)这一行代码,myDog这条狗绳,被复制了一份,而传入到changeName方法那条狗绳(dog),就是复制出来那一条,就像这样:...复制动作还是会做,执行changeInt(i),会将 i 复制到一个int上,传给changeInt方法,因此不管changeInt内部对入参做了什么,外面的 i 都不会受影响。...这个 = 操作,是值传递和引用传递根本差别,这也导致了值传递和引用传递有以下直观上差别: 如果参数是值传递,那么调用者(方法体外部)和被调用者(方法体内部)用是两个不同变量方法体里面对变量改动不会影响方法体外面的变量...如果参数是引用传递,那么调用者(方法体外部)和被调用者(方法体内部)用是两个相同变量方法体里面对变量改动会影响方法体外面的变量。...引用传递替代方法 引用传递有两个好处: 引用传递可以避免调用方法进行拷贝,尤其是当方法入参是个大对象,拷贝会耗费大量时间和空间,当然,这一点Java已经巧妙地解决了,因为对于对象,拷贝只是它引用而已

86620

前端温习(一):JavaScript入门

JavaScript 对象 JavaScript 对象并不需要去实例化成对象,对象只是一种特殊数据。对象拥有属性和方法。 访问对象属性 属性是与对象相关值。...创建 JavaScript 对象 这里能够定义并创建自己对象。 创建对象有两种不同方法使用 Object 定义并创建对象实例。 使用函数来定义对象,然后创建对象实例。...使用 Object 定义 在 JavaScript ,几乎所有的对象都是 Object 类型实例,它们都会从 Object.prototype 继承属性和方法。...Object 构造函数,会根据给定参数创建对象,具体有以下情况: 如果给定值是 null 或 undefined,将会创建并返回一个空对象。...添加属性和方法 有的时候我们想要在所有已经存在对象添加属性或方法,另外,有时候我们想要在对象构造函数添加属性或方法

49310

深入理解作用域和闭包

复制原始值,它值会被复制到变量位置。 复制引用值,它指针会被复制到变量位置。...3, 4,符合了我们预期 巧用块级作用域 在上述代码for循环表达式使用var定义了变量i,我们在函数作用域章节讲过,使用var声明变量变量会被自动添加到最接近上下文,此处变量i被提升到window.onload...它们在执行上下文栈存储顺序也大不相同,我们先来分析下第一段代码: 执行changeName()函数,创建一个执行上下文,并将其压入上下文栈 changeName()函数内部调用了f()函数,创建一个执行上下文...函数toString()方法,对arr数组进行了求和并返回结果 最后,在函数内部返回add函数引用,形成一个闭包结构 我们在调用unknownSum函数,第一次调用()会返回add函数引用,后续调用...最后调用add函数toString方法,对arr内缓存参数进行求和。

51830

前端温习(一):JavaScript入门

JavaScript 对象 JavaScript 对象并不需要去实例化成对象,对象只是一种特殊数据。对象拥有属性和方法。 访问对象属性 属性是与对象相关值。...JavaScript Copy 创建 JavaScript 对象 这里能够定义并创建自己对象。 创建对象有两种不同方法使用 Object 定义并创建对象实例。...使用函数来定义对象,然后创建对象实例。...使用 Object 定义 在 JavaScript ,几乎所有的对象都是 Object 类型实例,它们都会从 Object.prototype 继承属性和方法。...添加属性和方法 有的时候我们想要在所有已经存在对象添加属性或方法,另外,有时候我们想要在对象构造函数添加属性或方法

12530

一文总结 React Hooks 常用场景

谢谢支持 React 在 v16.8 版本推出了 React Hooks 特性。...在我看来,使用 React Hooks 相比于从前组件有以下几点好处: 代码可读性更强,原本同一块功能代码逻辑被拆分在了不同生命周期函数,容易使开发者不利于维护和迭代,通过 React Hooks...解决: 使用 useMemo 将对象属性包一层,useMemo 有两个参数: 第一个参数是个函数,返回对象指向同一个引用,不会创建对象; 第二个参数是个数组,只有数组变量改变,第一个参数函数才会返回一个对象...如下所示,使用 useRef 创建变量指向一个 input 元素,并在页面渲染后使 input 聚焦 import React, { useRef, useEffect } from 'react'...useRef 在 react hook 作用, 正如官网说, 它像一个变量, 类似于 this , 它就像一个盒子, 你可以存放任何东西. createRef 每次渲染都会返回一个引用,而

3.4K20

【初学者笔记】一文学会使用Vuex

---- 简介,安装与初始化 什么是vuex VueX是适用于在Vue项目开发使用状态管理工具。Vue为这些被多个组件频繁使用值提供了一个统一管理工具——VueX。...VueX核心内容 vuex,有默认五种基本对象: state:存储状态(变量) getters:对数据获取之前再次编译,可以理解为state计算属性。...如何使用mutation mutations方法都有默认形参:mutation([state] [,payload]) state 当前VueX对象state payload 载荷(该方法在被调用时传递参数...$store.commit('changeName',name); }, } //调用changeName方法 mounted(){ this.changeName('吴彦祖') } 当需要多参提交...rootState 可以使用es6解构赋值看起来更明确{ commit } payload 载荷(该方法在被调用时传递参数) 看一个例子,一秒钟以后提交mutation修改statename属性

4.6K30

react.memo、useMemo、useCallback深入理解

memo memo和组件pureComponent效果一样,使被包裹组件传入props有更新时候,才会重新渲染 useMemo useMemo作用是缓存一个值,阻止它被react重新render...,只有当依赖项改变时候值才会更新 useMemo第一个参数是个函数,且必须有返回值(被缓存值),第二个参数是数组,里面放被监听变量(依赖项),有变量改变,值才会被更新。...]); 17 18 // 场景2:每次组件更新会重新执行,内部引用类型变量会重新创建,这会导致使用到引用类型变量组件重新渲染,使用useMemo来让每次变量相同 19 const themeStyle...,阻止它被react重新render,只有当依赖项改变时候值才会更新 useMemo第一个参数一个函数(被缓存函数),第二个参数是数组,里面放被监听变量(依赖项),有变量改变,函数才会被更新。...示例 1import { useState, useCallback,memo } from "react"; 2 3// 父组件,给子组件传递name和changeName方法 4const Parent

68910

Vue3, setup语法糖、Composition API全方位解读

起初 Vue3.0 暴露变量必须 return 出来,template 才能使用;Vue3.2 只需要在 script 标签上加上 setup 属性,组件在编译过程中代码运行上下文是在 setup...本文章以Vue2角度学习Vue3语法,让你快速理解Vue3Composition Api本文章第十四节为状态库 Pinia 安装、使用讲解一、文件结构Vue2, 标签只能有一个根元素...、method // 调用方法 按钮 import...、变量暴露给父组件使用,父组件才可通过ref API拿到子组件暴露数据 defineExpose({ // 解构state ...toRefs(state), // 声明方法...下表包含如何在 Option API 和 setup() 内部调用生命周期钩子Option API setup beforeCreate 不需要 created

2.9K40

超实用 React Hooks 常用场景总结

在我看来,使用 React Hooks 相比于从前组件有以下几点好处: 代码可读性更强,原本同一块功能代码逻辑被拆分在了不同生命周期函数,容易使开发者不利于维护和迭代,通过 React Hooks...解决: 使用 useMemo 将对象属性包一层,useMemo 有两个参数: 第一个参数是个函数,返回对象指向同一个引用,不会创建对象; 第二个参数是个数组,只有数组变量改变,第一个参数函数才会返回一个对象...={changeName}/> ); }; export default Parent; 分析下原因: 点击父组件按钮,改变了父组件 count 变量值(父组件 state...元素 如下所示,使用 useRef 创建变量指向一个 input 元素,并在页面渲染后使 input 聚焦 import React, { useRef, useEffect } from 'react...useRef 在 react hook 作用, 正如官网说, 它像一个变量, 类似于 this , 它就像一个盒子, 你可以存放任何东西. createRef 每次渲染都会返回一个引用,而

4.6K30

原生JS | 作用域

一个变量在其作用域内是可以被访问,在作用域外不能被访问。 全局作用域与局部作用域 变量执行环境有两种:一种是全局,另一种是局部(:放在函数里面)。...局部变量 常见局部变量有以下两种: ● 在函数内声明变量使用var); ● 函数参数(形参)。 局部变量存在于函数体内,它们值只能在函数体内访问和修改。...当有多层作用域,深层作用域中查找变量,会按照“当前作用域”到“上层作用域”再到“全局作用域”顺序进行查找,这个查找顺序就可以理解为作用域链。...); 运行结果: 'HTML5学堂' 'HTML5学堂' 在全局作用域下创建变量,其实就是window对象属性/方法。...在全局打印user时候,由于在全局没有这个变量,所以报错。

4.7K50

solidity智能合约

智能合约 Solidity里智能合约是面向对象语言里。它们持久存放在状态变量和函数,(在里面)可以通过solidity修改这些变量。...在不同智能合约(实例)调用一个函数(过程),(实际上)是在EVM(Ether虚拟机)完成一次调用,并且完成(一次)上下文切换,(此时)状态变量是不可访问。...当使用上下文中super不知道情况下,真正函数将被调用,虽然它类型已经知道。这个和普通virtual方法查找相似。 基本构造函数参数 派生合约需要为基本构造函数提供所有的参数。...Solidity是沿用Python方式, 使用“C3线性化”,在基DAG强制使用特定顺序。这导致单调但不允许有一些继承关系。特别是,在其中基础顺序是直接,这点非常重要。...由于库是一片独立代码,如果它们显示地提供的话,就仅仅能访问到调用合约状态变量(有方法命名它们) 下面的例子解释了怎样使用库(确保用using for 来实现) library Set {   //

1.3K30

JavaScript入门笔记(5)函数

函数 函数就是最基本一种代码抽象方式 函数声明与调用 JavaScript声明函数方法有两种 声明一个有名称函数,使用类似C语言function name(arguments) {}...声明一个匿名函数,再将该函数赋值给一个变量使用var i = function (arguments) {}; 函数调用方法与C和Python都很相似,使用name(arguments)方式调用...,若未找到,则向更高层作用域搜索,因此,当函数内变量名和全局变量冲突,优先使用局部变量。...最常见做法是用一个var申明函数内部用到所有变量 方法 被绑定在对象里函数称为方法,在该函数可以使用this关键字访问本对象属性和方法调用使用使用对象名.方法名() var test...init变量就类似于一个私有变量一样,不能由外部操作,仅能通过返回函数操作。

63380

【易错概念】Solidity语法合约抽象合约接口库定义

2,合约定义(Contract) Solidity 合约类似于面向对象语言中。合约中有用于数据持久化状态变量,和可以修改状态变量函数。...调用另一个合约实例函数,会执行一个 EVM 函数调用,这个操作会切换执行时上下文,这样,前一个合约状态变量就不能访问了。...库可以看作是使用他们合约隐式合约。虽然它们在继承关系不会显式可见,但调用库函数与调用显式合约十分似 (如果 L 是库的话,可以使用 L.f() 调用库函数)。...为了在 EVM 实现这些,内部库函数代码和从其中调用所有函数都在编译阶段被拉取到调用合约,然后使用一个 JUMP 调用来代替 DELEGATECALL。...让我们用这种方式将 库 set 例子重写: // 这是和之前一样代码,只是没有注释。

1.4K20

《Java从入门到失业》第四章:和对象(4.4):方法参数及传递

参数类型可以是任何类型(即基本数据类型、类型)。参数名需要满足标识符规范,一般建议使用有含义名称。因为方法将会作为API一部分暴露给调用者阅读,不要因为参数名晦涩难懂而影响可读性。...形参是定义方法时候使用参数,用来接收调用者传递参数。方法调用时候,形参才会被分配内存空间,一旦方法调用完毕,形参内存就会被释放。...4.4.2值调用和引用调用        从上一小节我们看到,当调用方法时候传递是基本数据类型,实际上是把实参内存值传递给形参,这种方法调用我们称之为“值调用”。...实际上这个执行过程如下: 定义变量v,给v分配一块内存,内存值存放5 调用changeValue方法,分配一块内存给形参value,并将v值拷贝到value内存 执行方法,将value内存值加...变量diaochan内存存放是美人对象地址,假设地址为0xA1 调用changeName方法,分配一块内存给形参player,并将diaochan值拷贝到player内存,因此形参player

1.1K10
领券