当前位置: 首页 > news >正文

前端入门一之ES6--面向对象、够着函数和原型、继承、ES5新增方法、函数进阶、严格模式、高阶函数、闭包

前言

  • JS是前端三件套之一,也是核心,本人将会更新JS基础、JS对象、DOM、BOM、ES6等知识点,这篇是ES6;
  • 这篇文章是本人大一学习前端的笔记;
  • 欢迎点赞 + 收藏 + 关注,本人将会持续更新。

文章目录

  • JS高级 + ES6
      • 1、面向对象
        • 1.1、对象
        • 1.2、类
          • 1.2.1、创建类
          • 1.2.2、构造函数
          • 1.2.3、类中添加方法
        • 1.3、类的继承
        • 1.4、super关键字
          • 1.4.1、调用父类的构造函数
          • 1.4.2、调用父类的普通函数
        • 1.5、三个注意点
        • 1.6、面向对象tab案例
      • 2、构造函数和原型
        • 2.1、概述
        • 2.2、构造函数
          • 2.2.1、静态和实例成员
          • 2.2.2、构造函数的问题
        • 2.3、构造函数原型prototype
        • 2.4、对象原型
        • 2.5、constructor构造函数
        • s2.6、构造函数、实例、原型对象三者的关系
        • 2.7、原型链查找原则
        • 2.8、原型对象this指向
        • 2.9、扩展内置对象
      • 3、继承
        • 3.1、call()
        • 3.2、借用构造函数继承父类型属性
        • 3.3、借用原型对象继承父类型方法
        • 3.3、类的本质
      • 4、ES5新增方法
        • 4.1、数组方法
          • 4.1.1、forEach()
          • 4.1.1、filter() 筛选数组
          • 4.1.3、some()
        • 4.2、字符串方法、
        • 4.3、对象方法
          • 4.3.1、Object.keys()
          • 4.3.2、Object.defineProperty()
      • 5、函数进阶
        • 5.1、函数的定义方式
        • 5.2、函数的调用方法
        • 5.3、函数里面this的指向
        • 5.4、改变函数内部this指向
          • 5.4.1、call()方法
          • 5.4.1、apply()方法
          • **因此apply主要跟数组有关系,比如Math.max()求数组的最大值**
          • 5.4.3、bind()方法 (重点)
          • 5.4.4、总结(call() \ apply() \ bind() )
            • 主要运用场景
      • 6、严格模式
        • 6.1、开启严格模式
          • 6.1.2、为脚本开启严格模式
          • 6.1.2、为函数开启严格模式
      • 7、严格模式中的变化
        • 7.1、变量规定
        • 7.2、严格模式下this指向问题
        • 7.3、函数变化
      • 8、高阶函数
      • 9、闭包
        • 9.1、变量作用域
        • 9.2、什么是闭包
        • 9.3、在chrome中调试闭包
        • 9.4、闭包作用
        • 9.5、闭包练习
          • 9.5.1、点击li输出索引号
          • 9.5.2、定时器中的闭包

JS高级 + ES6

1、面向对象

面向对象的思维特点 :

  1. 抽取(抽象)对象共用的属性和行为组织(封装)成一个类
  2. 对类进行实例化,获取类的对象
1.1、对象

在技术中,对象是一组无序的相关属性和方法的集合,所有的事物都是对象

对象是由属性方法组成的

  • 属性:事物的特征,在对象用属性来表示
  • 方法:事物的行为,在对象中用方法来表示
1.2、类

ES6中怎加了类的概念,可以用class关键字说明一个类

  • 抽象了对象的公共部分,它指一个大类
  • 对象特指某一个,通过类实例化一个具体的对象
1.2.1、创建类
class name {}
  • 创建实例
var xx = new name();

注意:类必须使用new实例化对象

1.2.2、构造函数

constructor()方法是类的构造函数(默认方法),用于传递参数,返回实例对象,通过new命令生成对象实例时候,会自动调用该方法。

  • 通过class关键字创建类,类名我们还是习惯性定义首之母大写
  • 类里面有个constructor函数,可以接受传递过来的参数,同时返回实例对象
  • constructor函数只要new生成实例时,就会调用这个给函数,如果不写,类也会自动生成这个函数
  • 命名注意点:
    • 创建类->类名后不要加小括号
    • 生成实例->类名后面加小括号
    • 构造函数不需要加function关键字
//如:创建一个class类
<script>
class Star {constructor(uname,age) {this.uname = uname;this.age = age;}
}//2.创建对象var ldh = new Star('ldh',18);
</script>
1.2.3、类中添加方法

语法:

<script>
class Person {constructor(name,age) {this.name = name;this.age = age;}say() {console.log(this.name + 'hello');}
}var ldh = new Person('ldh',18);ldh.say();
</script>

注意:方法之间不能加逗号,同时方法不需要添加function关键字

  • 类共有的属性放到constructor里面
  • 类里面的函数都不需要写function关键字
1.3、类的继承

程序的继承:子类可以继承父类的一些属性和方法。

语法:

//父类
class Father {}
//子类
class Son extends Father {}

实例:

<script>
class Father {constructor(x , y) {this.x = x;this.y = y;}sum() {console.log(this.x + this.y);}}//子类继承父类,同时扩展方法
class Son extends Father P{consturctor(x,y) {//利用super 调用父类的构造函数//super 必须在子类this之前调用super(x,y);this.x = x;this.y = y;}subtract() {console.log(this.x - this.y);}
}var son = new Son(5,3);son.sum;
</script>
1.4、super关键字
  • super关键字用于访问和调用对象父类上的函数,可以调用父类的构造函数,也可以调用父类的普通函数
  • 注意1.4.1 和 1.4.2的调用方法
1.4.1、调用父类的构造函数

注意:子类在构造函数中使用super,必须放到this前面。

如:

<script>
//父类
class Father {constructor(surname) {this.surname = surname;}saySurname() {console.log(this.surname);}
} 
//子类继承父类class Son extends Father {constructor(surname,firstname) {super(surname);  //注意this.firstname = firstname;}sayFirstname() {console.log(this.firstname);}
}var d = new Son('l','dh');d.saySurname();d.sayFirstname();
</script>
1.4.2、调用父类的普通函数

语法:

<script>calss Father {say() {return 'father';}}class Son extends Father {return super.say();   //注意}
</script>
1.5、三个注意点
  1. 在ES6类没有变量提升,所以必须先定义类,才通过类实例化对象
  2. 类里面的共有属性和方法一定要加this 使用
  3. 类里面的this指向:
    • constructor 里面的this指向指向对象
    • 方法里面的this指向这个方法的调用
1.6、面向对象tab案例

2、构造函数和原型

2.1、概述

类就是对象的模板,对象就是类的实例。

ES6之前,对象不是基于类创建的,而是用一种构建函数的特殊函数来定义和它们的特征。

  • 创建对象有三种方法
    • 字面量创建对象
    • new Object()
    • 自定义构造函数
<script>//1.var obj1 = new Object();//2.var obj2 = {};//3.function Star(uname,age) {this.uname = uname;this.age = age;this.sing = function() {console.log('');
}
}var l = new Star('l',18);
</script>
2.2、构造函数
2.2.1、静态和实例成员
<script>function Star(uname,age) {this.uname = uname;this.age = age;this.song = function() {console.log('l');}}//实例成员var ldh = new Star('l',18);//静态成员Star.sex = 'man';
</script>
2.2.2、构造函数的问题

问题:浪费内存

在这里插入图片描述

2.3、构造函数原型prototype
<script>function Star(uname,age) {this.uname = name;this.age = age;}Star.prototype.sing = function() {console.log('l');}var ldh = new Star('l',18);
</script>
  • 构造函数通过原型分配函数所有对象都是共享的,没有内存浪费
  • js中,每一个构造函数都有一个prototype属性
  • prototype属性是一个对象
  • 把不变得方法定义在prototy对象上

原型是啥? 原型对象作用?

一个对象 共享方法

2.4、对象原型

在这里插入图片描述

  • Star.prototype 和 ldh.__proto__指向相同
<script>function Star(uname,age) {this.uname = uname;this.age = age;}Star.prototype.sing = function() {console.log('l');}var ldh = new Star('l',18);console.log(Star.prototype == ldh._proto_);     //true
</script>
2.5、constructor构造函数
  • 对象原型(_proto_)(左右两边是两个下划线)和构造函数(prototype)原型对象里面都有一个consrtuctor属性
  • constructor主要用于指向该对象哪一个构造函数
<script>function Star(uname,age) {this.uname = uname;this.age = age;}//注意Star.prototype = {//这个要注意constructor: Star;sing: function() {console.log('l');}movie: function() {console.log('m');}}
</script>
s2.6、构造函数、实例、原型对象三者的关系
  • __proto__constructor属性是对象所独有的; prototype属性是函数所独有的

在这里插入图片描述

2.7、原型链查找原则

在这里插入图片描述

  1. 当访问一个对象的属性(包括方法)时,首先查找这个对象自身有没有该属性
  2. 如果没有找到就查找原型_proto_ 指向的prototype对象
  3. 如果还没有就查找原型对象的模型(object的原型对象)
  4. 依次推直到 null
2.8、原型对象this指向
  • 构造函数中this指向我们的实例对象
  • 原型对象里面放的是方法,这个方法里面的this指向的是这个方法的调用者,也就是这个实例对象
2.9、扩展内置对象
  • 可以通过原型对象,对原来的内置对象进行扩展自定义的方法
  • 如:
<script>Array.prototype.sum = function() {var sum = 0;for(var i = 0;i < this.length;i++) {sum += this[i];}return sum;}var str = [1,2,3];str.sum();
</script>

注意

  • 数组和字符串内置对象不能给原型对象覆盖操作Array.prototype = {},只能是Array.prototype.xxx = function(){}的方式

3、继承

ES6 之前并没有给我们提供extends继承

  • 构造函数 + 原型对象模拟实现继承,称为组合继承
3.1、call()

调用这个函数,并且修改函数运行时的this指向

fun.call(thisArg,arr1,arr2,……);
  • thisArg:当前调用函数this指向
  • arg1,arg2:传递的其他参数

<script>function fn(x,y) {console.log(this);console.log(x + y);}var o = {name: 'pig';}fn.call(o,1,2);//fn.call(); 也可以调用函数
</script>
3.2、借用构造函数继承父类型属性
  • 核心原理:通过call()把父类型的this指向子类型的this,这样就可以实现子类继承父类的属性
<script>function Father(uname,age) {this.uname = uname;this.age = age;}function Son(uname,age,sex) {//继承父亲的属性  在this前Father.call(this,uname,age);this.sex = sex;}var son = new Son('l',18,'man');</script>
3.3、借用原型对象继承父类型方法
  • 一般情况下,对象的方法都在构造函数的原型对象设置,通过构造函数无法继承父类方法

核心原理:

  1. 将子类所共享的方法提取出来,让子类 prototype 原型对象 = new 父类()
  2. 本质:子类原型对象等于实例化父类,因为父类实例化会另外开票空间
  3. 将子类的consructor重新指向子类的构造函数
<script>function Father(uname,age) {this.uname = uname;this.age = age;}Father.prototype.money = function() {console.log(100000);}function Son(uname,age,sex) {Father.call(Son,uname,age);this.sex = sex;}//直接 Son.prototype = Father.prototype; 这样会修改子类的原型对象Son.prototype = new Father();//如果利用对象修改了原型对象Son.prototype.constructor = Son;
</script>
3.3、类的本质
  1. class本质还是function
  2. 类的所有方法都定义在类的prototype属性上
  3. 类创建的实例,里面也有_proto_指向类的prototype原型对象

4、ES5新增方法

ES5给我们新增了一些方法,可以方便操作数组或者字符串

  • 数组方法
  • 字符串方法
  • 对象方法
4.1、数组方法
  • 遍历方法:foreach(),map(),filter(),some,every();
4.1.1、forEach()
array.forEach(function(currentValue,index,arr));
  • currentValue:数组当前项的值
  • index:数组当前项的索引
  • arr:数组对象本身
<script>var arr = [1,2,3,4,5,6,7,8,9];var sum = 0;arr.forEach(function(Valude,index,arr)) {console.log('每个数组元素' + value);console.log('每个数组元素的' + index);console.log('数组本身' + array);sum += value;}
</script>
4.1.1、filter() 筛选数组
<script>array.filter(function(currentValue,index,arr)) {}
</script>
  • filter( ) 方法创建一个新数组,新数组中的元素是通过检查指定数组中符合条件的所有元素
  • 返回一个新数组
<script>var arr = [12,66,34,24,134];var newArr = arr.filter(function(value,index)) {return value % 2 === 0;                }
</script>
4.1.3、some()
  • some()方法用于检测数组中的元素是否满足指定条件
  • 返回:是布尔值,找到了 true,没有就是false
  • 且注意:找到了满足条件的第一个元素,则终止循环,不在寻找
<script>var arr = [1,2,3,4,5];var flag = arr.some(function(value)) {return value === 2;}
</script>
4.2、字符串方法、
  • trim()方法会从一个字符串的两端删除空白字符串
  • trim方法不会影响字符串本身,他返回的是一个新的字符串
<body><input type = "text" > <button>点击</button>var str = '   an  dy   ';var str1 = str.trim();//获取元素var input = document.querySelector('input');var btn = document.querySelector('button');var div = document.querySelector('div');btn.onclick = function() {var str = input.value.trim();if(str == ' ') {alert('please input');} else {div.innerHTML = str;}}
</body>
4.3、对象方法
4.3.1、Object.keys()
  • Object.keys()用于获取对象自身所有的属性
  • 效果类似for……in
  • 返回:一个由属性名组成的数组
  • 返回:
<script>var obj = {name: 'pig',age: 18,sex: 'man'};var arr = Object.keys(obj);
</script>
4.3.2、Object.defineProperty()
  • Object.defineProperty()定义对象中新属性或者修改原有得出属性
Object.defineProperty(obj,prop,descriptor)
  • obj:目标对象
  • prop:需定义或修改的属性的名字
  • descriptor:目标属性所拥有的特性
<script>var obj = {id: 1,price: 5200}//定义新属性或者原来属性Object.defineProperty(obj,'price',{value: 100000,})Object.defineProperty(obj,'id',{//如果值为false,则不允许修改这个属性值,默认值也为falsewritable: false;})Object.defineProperty(obj,'id',{//如果值为false 则不允许遍历。默认值是falseenumerable: false})Object.defineProperty(obj,'id',{//如果值为false,则不允许删除这个属性,不允许修改,默认值为falseconfigurable: false})
</script>

第三个参数descriptor 说明:以对象新式{}书写

value:设置属性的值,默认为unvalue

writeable:值是否可以重写

enumerable:值是否可以列举

**configurable:**值是否可以被删除

5、函数进阶

5.1、函数的定义方式
  1. 函数声明方式function关键字(命名函数)

  2. 函数表达式

  3. new Function()

    • var fn = new Function('参数一','参数二','函数体')
      
    • 执行效率低

<script>//1.function fn() {};//2.var fun = function() {};//3.var f = new Function('a','b','console,log(a + b)');</script>
5.2、函数的调用方法
  1. 普通函数
  2. 对象的方法
  3. 构造函数
  4. 绑定事件函数
  5. 定时器函数
  6. 立即执行函数
<script>//1.function fn() P{
}//2.var o = {say: function() {}}o.say();//3.function Satr() {}new Star();//4.btn.onclick = function() {};//5.setInterval(function() {},1000);//6.(function() {})();
</script>
5.3、函数里面this的指向

this指向,是我们调用函数确定的(忘了可以通过代码)

5.4、改变函数内部this指向
  • call() bind() apply()
5.4.1、call()方法
  • call() 如在继承中使用

同上

5.4.1、apply()方法
  • apply()方法调用一个函数,简单理解为调用函数的方式

  • fun.apply(thisArg,[argsArray])

  • thisArg:在fun函数运行时指定的this值

  • argsArray:传递的值,必须包含在数组里面

  • 返回值就函数的返回值

  • 因此apply主要跟数组有关系,比如Math.max()求数组的最大值
<script>var o = {name: 'andy'};function fn(arr) {console.log(arr);}fn.apply(o,['pink']);//如:求最大值,最小值var arr = [1,2,3,4,55];var max = Math.max.apply(Math,arr);var min = Math.min.apply(Math,arr);
</script>
5.4.3、bind()方法 (重点)
  • bind()方法不会调用函数。但是能改变函数内部this指向
  • fun.bind(thisArg,arg1,arg2,……)
  • 只想要改变this指向,并不想调用这个函数的时候
<body><button>点击</button><script>var btn = querySelector('button');for(var i = 0;i < btn.length;i++) {btn[i].onclick = function() {this.disabled = true;setTimeout(function() {this.disabled = false;}.bind,2000)}}</script>
</body>
5.4.4、总结(call() \ apply() \ bind() )

不同点:

  • call 和 apply 会调用函数,
  • call 和 apply 传递的参数不一样,call 传递参数,apply 必须数组形式
  • bind 不会调用函数
主要运用场景
  1. call 经常做继承
  2. apply 经常和数组有关,如数组最大值和最小值
  3. bind 不调用函数,如:改变定时器内部this指向

在这里插入图片描述

6、严格模式

6.1、开启严格模式
  • 严格模式可以运用到整个脚本个别函数
  • 因此在使用时,我们可以将严格模式分别为为脚本开启严格模式为函数开启严格模式两种情况
6.1.2、为脚本开启严格模式
  • 为整个脚本文件开启严格模式,需要在所有语句之前放一个特定语句
  • 'use strict'"use strict"
<script>//最好用立即执行函数封装一个严格模式(function () {'use strict';})();//或者在头上直接声明'use strict';
</script>
6.1.2、为函数开启严格模式
<script>function fun() {'use strict';}
</script>

7、严格模式中的变化

  • 严格模式对js的语法和行为,都做了一些改变
7.1、变量规定
  • 正常模式中,如果一个变量没有声明就赋值,默认为全局变量
  • 但是在严格模式下,这种方式静止使用
  • 严禁删除已经声明的变量,如:使用delete语法是错误的
7.2、严格模式下this指向问题
  • 以前在 全局作用域中的 this指向window对象
  • 严格模式下全局作用域中函数中thisundefined
  • 以前构造函数时不加new也可以调用,当普通函数,this指向全局对象
  • 在严格模式下,如果构造函数不加new调用,this指向的是undefine,且不能赋值
  • new实例化构造函数指向创建的创建的对象实例
  • 定时器this还是指向window
  • 事件、对象还是指向调用者
7.3、函数变化
  1. 函数不能有重名函数
  2. 函数声明必须在顶层,不允许在非函数的代码块内声明函数(如if 语句,for语句中)。

8、高阶函数

  • 高阶函数是对其他函数进行操作的函数,它接受函数作为参数或者将函数作为返回值输出
<script>//接收函数作为参数function  fn(a,b,callback) {console.log(a+b);callback&&callback();}fn(5,6,function() {console.log("end");})//将函数作为返回值function fn() {return function(){}}
</script>

9、闭包

9.1、变量作用域

变量作用域分为两种:全局变量和局部变量

  1. 函数内部可以使用全局变量
  2. 函数外部不可以使用局部变量
  3. 当函数执行完毕,本作用域的局部变量会销毁
9.2、什么是闭包

简单理解:一个作用域可以访问另一个函数内部的局部变量

<script>//闭包:closurefunction fn1() {var num = 10;function fn2() {console.log(num);    //10}}fn1();//调用fn2函数var f = fn1();f();
</script>
9.3、在chrome中调试闭包

在这里插入图片描述

9.4、闭包作用
  • 延伸变量的作用范围,一般结合立即执行函数一起执行。
<script>function fn1() {var num = 10;function fn2() {console.log(num);    //10}}var f = fn1();f();
</script>
9.5、闭包练习
9.5.1、点击li输出索引号
<body><ul class="nav"><li>榴莲</li><li>臭豆腐</li><li>鲱鱼罐头</li><li>大猪蹄子</li></ul><script>//页面元素操作 BOM DOM//1.利用动态添加属性方法var lis = document.querySelector('.nav').querySelectorAll('li');for(var i = 0; i < lis.length;i++) {lis[i].index = i;lis[i].onclick = function() {console.log(this.index);}}//2.利用闭包的方式得到当前小li的索引号for(var i = 0;i < lis.length;i++) {(function(i) {lis[i].onclick = function() {console.log(i);}})(i);}</script>
</body>
9.5.2、定时器中的闭包
<body><ul class="nav"><li>榴莲</li><li>臭豆腐</li><li>鲱鱼罐头</li><li>大猪蹄子</li></ul>// 3秒之后,打印所有li元素内容var lis = document.querySelector('.nav').querySelectorAll('li');for(var i = 0;i < lis.length;i++) {(function(i) {setTimeout(function()  {                             console.log(lis[i].innerHTML);} , 3000)})();}
</body>

相关文章:

前端入门一之ES6--面向对象、够着函数和原型、继承、ES5新增方法、函数进阶、严格模式、高阶函数、闭包

前言 JS是前端三件套之一&#xff0c;也是核心&#xff0c;本人将会更新JS基础、JS对象、DOM、BOM、ES6等知识点&#xff0c;这篇是ES6;这篇文章是本人大一学习前端的笔记&#xff1b;欢迎点赞 收藏 关注&#xff0c;本人将会持续更新。 文章目录 JS高级 ES61、面向对象1.1…...

脑机接口、嵌入式 AI 、工业级 MR、空间视频和下一代 XR 浏览器丨RTE2024 空间计算和新硬件专场回顾

这一轮硬件创新由 AI 引爆&#xff0c;或许最大受益者仍是 AI&#xff0c;因为只有硬件才能为 AI 直接获取最真实世界的数据。 在人工智能与硬件融合的新时代&#xff0c;实时互动技术正迎来前所未有的创新浪潮。从嵌入式系统到混合现实&#xff0c;从空间视频到脑机接口&…...

RoseTTAFold MSA_emb类解读

MSA_emb 类的作用是对多序列对齐(MSA)数据进行嵌入编码,同时添加位置编码和查询编码(调用PositionalEncoding 和 QueryEncoding)以便为序列特征建模类。 源代码: class MSA_emb(nn.Module):def __init__(self, d_model=64, d_msa=21, p_drop=0.1, max_len=5000):super(…...

2411C++,C++26反射示例

参考 namespace __impl {template<auto... vals>struct replicator_type {template<typename F>constexpr void operator>>(F body) const {(body.template operator()<vals>(), ...);}};template<auto... vals>replicator_type<vals...>…...

Ubuntu上搭建Flink Standalone集群

Ubuntu上搭建Flink Standalone集群 本文部分内容转自如下链接。 环境说明 ubuntu 22.06 先执行apt-get update更新环境 第1步 安装JDK 通过apt自动拉取 openjdk8 apt-get install openjdk-8-jdk执行java -version&#xff0c;如果能显示Java版本号&#xff0c;表示安装并…...

C语言 精选真题2

题目要求&#xff1a;将形参s所指向的字符串转换为整数并且返回 知识点&#xff1a; 将字符1转化为整数1 int fun(char *s) {int flag1,n0; if(*s-) //先根据第一个符号来判断是正负&#xff1b;然后读取第二位{flag-1;s; }else if(*s){s;}while(*s>0&&…...

Netty篇(WebSocket)

目录 一、简介 二、特点 三、websock应用场景 四、websocket案例 1. 服务端 2. 处理器 3. 页面端处理 五、参考文献 一、简介 没有其他技术能够像WebSocket一样提供真正的双向通信&#xff0c;许多web开发者仍然是依赖于ajax的长轮询来 实现。&#xff08;注&#xff…...

云原生-docker安装与基础操作

一、云原生 Docker 介绍 Docker 在云原生中的优势 二、docker的安装 三、docker的基础命令 1. docker pull&#xff08;拉取镜像&#xff09; 2. docker images&#xff08;查看本地镜像&#xff09; 3. docker run&#xff08;创建并启动容器&#xff09; 4. docker ps…...

MySQL数据库:SQL语言入门 【上】(学习笔记)

SQL&#xff08;Structured Query Language&#xff09;是结构化查询语言的简称&#xff0c;它是一种数据库查询和程序设计语言&#xff0c;同时也是目前使用最广泛的关系型数据库操作语言。&#xff08;95%适用于所有关系型数据库&#xff09; 【 SQL是关系型数据库通用的操作…...

重学 Android 自定义 View 系列(六):环形进度条

目标 自定义一个环形进度条&#xff0c;可以自定义其最大值、当前进度、背景色、进度色&#xff0c;宽度等信息。 最终效果如下&#xff08;GIF展示纯色有点问题&#xff09;&#xff1a; 1. 结构分析 背景圆环&#xff1a;表示进度条的背景。进度圆环&#xff1a;表示当前…...

nodejs 020: React语法规则 props和state

props和state 在 React 中&#xff0c;props 和 state 是管理数据流的两种核心机制。理解它们之间的区别和用途是构建 React 应用程序的基础。 一、props 和 state的区别 特性propsstate定义方式由父组件传递给子组件的数据组件内部管理的本地数据是否可修改不可变&#xff…...

STM32问题集

这里写目录标题 一、烧录1、 Can not connect to target!【ST-LINK烧录】 一、烧录 1、 Can not connect to target!【ST-LINK烧录】 烧录突然 If the target is in low power mode, please enable “Debug in Low Power mode” option from Target->settings menu 然后就&…...

SwiftUI(十二)- 容器组件 布局与结构的基石

引言 在用户界面开发中&#xff0c;布局是设计一个应用程序的视觉层次和交互体验的核心之一。无论是设计简单的按钮排布&#xff0c;还是复杂的多层次页面&#xff0c;合理的布局和结构可以极大地提升用户体验。而容器组件&#xff0c;作为将多个视图整合、组织、排列的工具&a…...

想租用显卡训练自己的网络?AutoDL保姆级使用教程(PyCharm版)

各位小伙伴们大家好~ 不知道各位同学在科研过程中是否有这样的苦恼 电脑无显卡。难不成我要用CPU跑实验吗&#xff1f;救救我吧电脑显卡算力太低。训练过程慢慢慢慢慢&#xff0c;等半天都出不来结果电脑显卡显存不够&#xff0c;batchsize稍微高一点点&#xff0c;就要爆显存…...

LeetCode【0039】组合总和

本文目录 1 中文题目2 求解方法&#xff1a;回溯法2.1 方法思路2.2 Python代码2.3 复杂度分析 3 题目总结 1 中文题目 给定一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#…...

AscendC从入门到精通系列(一)初步感知AscendC

1 什么是AscendC Ascend C是CANN针对算子开发场景推出的编程语言&#xff0c;原生支持C和C标准规范&#xff0c;兼具开发效率和运行性能。基于Ascend C编写的算子程序&#xff0c;通过编译器编译和运行时调度&#xff0c;运行在昇腾AI处理器上。使用Ascend C&#xff0c;开发者…...

PostgreSQL中的COPY命令:高效数据导入与导出

在PostgreSQL数据库中&#xff0c;数据导入和导出是日常工作中常见的操作。传统的插入&#xff08;INSERT&#xff09;方法虽然可以实现数据的导入&#xff0c;但在处理大量数据时效率较低。而COPY命令则提供了一个快速、高效的方式来完成这一任务。COPY命令不仅可以用于将数据…...

【HAL库】STM32F105VCTx多通道ADC+DMA方式的【STM32CubeMX】配置及代码实现

相关代码编写 配置好后点击生成代码&#xff0c;在生成代码的adc.c文件中的初始化函数MX_ADC1_Init中添加如下代码&#xff1a; HAL_ADCEx_Calibration_Start(&hadc1); /* 校准ADC */HAL_ADC_Start_DMA(&hadc1,(uint32_t*)ADC_Value,ADC_DMA_…...

[SaaS] 数禾科技 AIGC生成营销素材

https://zhuanlan.zhihu.com/p/923637935https://zhuanlan.zhihu.com/p/923637935...

vue3中查找字典列表中某个元素的值对应的列表索引值

vue3中查找字典列表中某个元素的值对应的列表索引值 目录思路方法代码实现示例解释说明 目录 思路方法 要获取字典列表中某个元素的值对应的列表索引值&#xff0c;可以使用数组的 findIndex 方法。这个方法返回数组中满足提供的测试函数的第一个元素的索引。如果没有找到&am…...

爱普生机器人EPSON RC

爱普生机器人Epson RC系列&#xff0c;搭配其专用的Epson RC编程语言和软件环境&#xff0c;为用户提供了一个直观且功能强大的机器人控制和编程解决方案。以下是对Epson RC及爱普生机器人的一些详细介绍&#xff1a; Epson RC 定义&#xff1a;Epson RC 是爱普生机器人技术中…...

Linux探秘坊-------1.系统核心的低语:基础指令的奥秘解析(1)

1.Linux的背景介绍 Linux 操作系统的发展历程充满了激情与创新喵&#xff5e;&#x1f380; 萌芽期 (1983 - 1991)&#xff1a;Linux 的历史可追溯到 1983 年&#xff0c;理查德斯托曼 (Richard Stallman) 发起 GNU 计划&#xff0c;目标是创建一个自由软件操作系统。1987 年发…...

❤React-JSX语法认识和使用

1、JSX基本使用​ JSX是React的核心 JSX是ES的扩展 jsx语法 -> 普通的JavaScript代码 -> babel React可以使用JSX的前提和原因&#xff1a; React生态系统支持&#xff1a; 脚手架通常用于构建React应用程序&#xff0c;而JSX是React框架的核心语法之一。因此&#xf…...

51单片机应用开发(进阶)---定时器应用(电子时钟)

实现目标 1、巩固定时器的配置流程&#xff1b; 2、掌握按键、数码管与定时器配合使用&#xff1b; 3、功能1&#xff1a;&#xff08;1&#xff09;简单显示时间。显示格式&#xff1a;88-88-88&#xff08;时-分-秒&#xff09; 4、功能2&#xff1a;&#xff08;1&#…...

JavaScript中的对象-栈内存和堆内存以及this指向的两种情况(后续会出进阶)

1.1 栈内存和堆内存 我们知道程序是需要加载到内存中来执行的&#xff0c;我们可以将内存划分为两个区域:栈内存和堆内存 原始类型占据的空间是在栈内存中分配的对象类型占据的空间是在堆内存中分配的 1.1.1 值类型和引用类型 原始类型的保存方式&#xff1a;在变量中保存的是…...

shell脚本使用curl上传FTP

背景&#xff1a;要求使用curl通过shell脚本实现上传文件到FTP的功能&#xff0c;同时对远程目录不存在的时候&#xff0c;主动创建目录并上传文件&#xff0c;shell脚本如下&#xff1a; #!/bin/bash# FTP服务器的地址 FTP_SERVER"ftp://1.1.1.1:2121" # FTP用户名…...

【漏洞分析】Fastjson最新版本RCE漏洞

01漏洞编号 CVE-2022-25845CNVD-2022-40233CNNVD-202206-1037二、Fastjson知多少 万恶之源AutoType Fastjson的主要功能是将Java Bean序列化为JSON字符串&#xff0c;这样得到的字符串就可以通过数据库等方式进行持久化了。 但是&#xff0c;Fastjson在序列化及反序列化的过…...

【项目开发 | 跨域认证】JSON Web Token(JWT)

未经许可,不得转载。 文章目录 JWT设计背景:跨域认证JWT 原理JWT 结构JWT 使用方式注意JSON Web Token(缩写 JWT)是目前最流行的跨域认证解决方案,本文介绍它的原理、结构及用法。 JWT设计背景:跨域认证 互联网服务的用户认证流程是现代应用中的核心组成部分,通常的流程…...

杨中科 .Net Core 笔记 DI 依赖注入2

ServiceCollection services new ServiceCollection();//定义一个承放服务的集合 services.AddScoped<iGetRole, GetRole>();using (ServiceProvider serviceProvider services.BuildServiceProvider()) {var list serviceProvider.GetServices(typeof(iGetRole));//获…...

微信版产品目录如何制作?

微信作为我国最流行的社交媒体平台&#xff0c;拥有庞大的用户群体。许多企业都希望通过微信来推广自己的产品&#xff0c;提高品牌知名度。制作一份精美、实用的微信版产品目录&#xff0c;是企业微信营销的重要手段。微信版产品目录的制作方法&#xff0c;帮助您轻松入门。 ​…...