面向对象高级( 随手记-1)

本文深入探讨JavaScript中的数据类型划分及其特性,并介绍了如何利用构造函数及原型来实现面向对象编程,强调了DRY原则的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

座右铭写在前面:

温故而知新..

温故而知新..

温故而知新!!!


//获取类型的方式: 


typeof 运算符(关键字)   类型:小写 number


构造函数 Number Object Function

Number String Boolean Object Array Date RegExp //构造函数
Math : //对象

创建对象的两种方式:
var obj={}        var obj1 =new Object();

数据类型:
js中是有数据类型的,是弱类型:有数据类型,但是不受数据类型的约束
不要修改变量的类型

数据类型 两大类:
1.值类型:(简单类型,基本类型):number string boolean null underfind
特殊::// 使用 typeof null  //object (计算机原理)

2.引用类型:(复杂类型): object  (统称为 对象 /object)
特殊:: // (函数也是对象, typeof 函数 // 结果func )
// 函数是js中的一等公民

//typeof 返回值 是字符串  var abc =typeof 123;  typeof abc //string
_________________________________________________________

什么是值类型  什么是引用类型

1.如果一个变量中存储的是值本身,那么就是一个值类型
值类型就是存储在 栈 中的 
栈(数据结构)(先进后出) 
js是没法操作内存的

2.如果一个变量中存储的是数据的地址(引用),就是引用类型
引用类型分为两种存储空间:1.变量的存储的引用   2.值(数据)
栈中存储的是:对象的地址
堆中存储的是:对象本身

函数的形参可以看作是:函数内部声明的局部变量
__________________________________________________________

===
//先比较类型在比较值;如果类型不同,直接返回:false ,不会再比较值

==
//比较的时候,会进行类型的转换   不推荐使用

[]==1  //false     null ==underfind
高程 52页!!
___________________________________________________________

逻辑中断: 
逻辑或:表达式1 || 表达式2
作用:如果第一个表达式的值转化为true ,那么久返回第一个表达式的值
     如果第一个表达式转化为false ,那么久返回第二个表达式
中断:不会执行后面
一般用在:给函数参数设置默认值;

逻辑与:表达式1 && 表达式2 
作用:和逻辑与完全相反;
用法:if(true){ fn(); } ===  true && fn(); // 满足某个条件在调用
___________________________________________________________

in 运算符
语法:布尔值=属性 in 对象
作用:看对象能不能访问到该属性,如果能访问到结果就是true,否则就是fasle
in运算符前面就是一个字符串或者可以转化为一个字符串
特殊::对于属性值为undefind的情况,只能通过in运算进行判断

var arr [1]; console.log(1 in arr)  //也可以用来判断数组的属性
//数组的索引,就相当于对象的属性
属性是字符串要用''  var obj = {name:'xm'}   con.log('name' in obj)

//通过点运算符(,) 就是访问对象属性,也就是看下对象中有没有点指定的
属性名    能用点就别用中括号

delete 运算符
语法: delete 对象.属性
作用: 用来删除对象的属性

delete obj1.name;//删除name属性    添加属性: obj1.name=undefined
特点:没有改变数组的长度 delete arr[0];//一般 数组用splice(0,1)
//清空数组  arr.length=0; //将数组中的内容全部移出,长度变为0

//声明变量的时候,可以不使用var,这样会创建全局变量.不推荐!!!!
test='小明' 
delete window.test;  console.log(test) //报错 con.log('test' in window) //fasle

var test ='123'  delete window.test;//删除不掉 con.log(test)//123
_____________________________________________________________

循环:

for 遍历数组
注意:删除数组元素的时候,有坑!!!! splice(索引 ,个数)

for-in 遍历对象
while 如果不知道遍历次数,就用while
do-while 先执行一些操作,在遍历

分支语句:
if-else-if
switch-case

case 1:
case 2:
console.log();

跳转语句:
break; //跳出整个循环   一般就是用在循环中
continue; //跳出本次循环,进行下一次循环

return ; //只能用在函数中 //让函数停止运行


syntex 语法错误

__________________________________________________________

函数:

创建函数的语法:
1. var fn =function(){}  //函数表达式

2. function foo(){}; //函数声明
//不同点 预解析时不同 函数提升不同

3. var bar =new Function(); //通过构造函数来创建

//函数就是  返回值  和  参数   this
可以通过 return 来设置函数的返回值,是可选的;

调用函数是如果没有传参数,此时参数的值为 undefined;
函数的参数是有顺序的,如果想给后面的参数传值,前面必须有值
(undefined,1)

形参:只能在函数 内部使用//可以把函数参数看作是函数内部的局部变量

最终由调用的实参来决定的,只是占个位置

__________________________________________________________

异常处理:
语法:
try 尝试
catch 捕获/抓住 
finally 最后/最终

语法: try{ 异常代码 }catch(error){ 执行catch中代码 }finally{ 

不管代码是否报错,finally中的代码是一定要执行的!! }

__________________________________________________________

表达式:

有值;
只要能够作为方法参数的内容,就是表达式

语句:
分号;    a=1;    
高级程序设计 5版
_____________________________________________________________

面向对象:

是一种编程思想;或者是组织代码的一种形式;万物皆对象;

怎么理解面向对象?
1.面向过程 和 面向对象 的 区别
2.javaScript中的面向对象是如何实现的
3.其他编程语言中的面向对象的表现形式(了解)

面向过程 :所有的事情都是需要我们自己来完成的,亲力亲为;
我们在面向过程中是处于执行者的角色;
例: 创建 按钮 ;绑定事件 ;添加元素;
document.createTextNode 创建文本节点
一般就是在代码量比较少,功能比较简单的场景 适用;

面向对象 :我们想完成一件事件只需要找到某个对象然后让它帮我们完成即可;
我们在面向对象中处于调度者的角色;
例:jquery 操作dom就是一个面向对象的方式  (用一个方法)
一般适用于项目规模较大,代码量较多;

面向过程的 方式 要比面向对象的方式代码执行效率高!!
但是面向对象 对于大型项目来说有利于多人合作开发(团队合作),有利于代码
的维护,扩展,更新迭代;

 库 框架 :按照面向对象的思想组织代码;

DRY 原则: don`t repeat yourself  不要重复你自己

1.需要维护两份代码  2.多人都完成一份相同的代码造成浪费;

全局污染:(命名冲突)

使用对象组织代码带来的优势:
保证全局环境中只有一个对象,将全局环境污染降到最低
按照模块进行代码的划分
不管是代码的维护还是功能的扩展都变得更加简洁了

使用命名空间的方式 组织代码:
js本身是没有命名空间的概念,只能通过代码技巧来进行模块(还是为了避免
全局污染的问题)
顶级命名空间 /一级命名空间
这种方式使用与全局环境中只有一个对象的场景

TUI 雅虎UI框架
___________________________________________________________

构建面向对象:

使用构造函数来创建对象 (创建构造函数就是一个普通的函数 大写(约定))

function Person(){  
如果要给构造函数创建出来的实例对象添加属性,需要通过
this.name='xm';
this.age=19;
 };
var p =new Person(); //实例对象

构造函数与new运算符,配合用来创建函数并初始化
创建 实例对象:由构造函数创建出来的对象就叫实例对象
p是构造函数Person 的实例对象
实现复用的目的

只要调用new person 就是创建一个新的实例对象

原型: 

原型:用来存放一些公共的属性或方法 作用:数据共享
让多个实例对象访问同一个对象中内容

获取到原型: 构造函数.prototype 获取到原型.
类型:object
Student.prototype.say=function(){};

实例对象可以访问到 原型对象 中的属性和方法;
对象中搞得方法,放到了 原型中

__proto__ :通过访问实例对象的属性,可以访问到原型
prototype :通过访问构造函数可以访问到原型 

最佳实践:将属性放到构造函数中,将所有的方法以及公共的属性都放到
原型对象中    这就是使用  构造函数+原型  组织代码的最佳实践;

________________________________________________________


属性搜索原则的介绍:
//实例对象可以访问到 原型对象的属性和方法

搜索原则:

1.会在对象本身查找有没有该属性,如果有直接返回
2.如果在对象本身没有找到属性,那么就会到原型对象中查看有没有这个属性
3.如果在原型对象中没有找到属性,那么就会到原型对象的原型对象中查找
4.一直查找到object.protopyte对象,如果找到就返回属性的值
5.如果最终也没找到属性,那么此时属性的值:undefined

总结:
首先在对象中查找,然后到原型对象中查找,最终,找不到就是 undefined;
__________________________________________________________
                 
如果构造函数没有参数,那么小括号是可以省略的

__proto__ 是一个非标准的属性,没有规范来描述这个属性的作用
这个属性是浏览器实现的;
在生产环境(正式项目)中不要使用这个属性!!! 如果要操作原型值能通过

prototype来操作;

笔记连载中 , 学习座右铭: 温故而知新!吐舌头

内容概要:该论文探讨了一种基于粒子群优化(PSO)的STAR-RIS辅助NOMA无线通信网络优化方法。STAR-RIS作为一种新型可重构智能表面,能同时反射和传输信号,与传统仅能反射的RIS不同。结合NOMA技术,STAR-RIS可以提升覆盖范围、用户容量和频谱效率。针对STAR-RIS元素众多导致获取完整信道状态信息(CSI)开销大的问题,作者提出一种在不依赖完整CSI的情况下,联合优化功率分配、基站波束成形以及STAR-RIS的传输和反射波束成形向量的方法,以最大化总可实现速率并确保每个用户的最低速率要求。仿真结果显示,该方案优于STAR-RIS辅助的OMA系统。 适合人群:具备一定无线通信理论基础、对智能反射面技术和非正交多址接入技术感兴趣的科研人员和工程师。 使用场景及目标:①适用于希望深入了解STAR-RIS与NOMA结合的研究者;②为解决无线通信中频谱资源紧张、提高系统性能提供新的思路和技术手段;③帮助理解PSO算法在无线通信优化问题中的应用。 其他说明:文中提供了详细的Python代码实现,涵盖系统参数设置、信道建模、速率计算、目标函数定义、约束条件设定、主优化函数设计及结果可视化等环节,便于读者理解和复现实验结果。此外,文章还对比了PSO与其他优化算法(如DDPG)的区别,强调了PSO在不需要显式CSI估计方面的优势。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值