JS膏集03

本文深入探讨了JavaScript中的原型和原型链概念,解析了构造函数、实例对象与原型对象之间的关系,介绍了原型链的工作原理,以及如何通过原型链实现继承。文章还详细讲解了继承的多种实现方式,包括原型继承、借用构造函数继承、组合继承和拷贝继承,并讨论了各自的优缺点。

JS膏集03

1、复习

原型:
    * 在构造函数中有一个属性:prototype,是原型,也是一个对象,程序员使用的
    * 在实例对象中有一个属性:__proto__,是原型,也是一个对象,浏览器使用的,不是标准属性
    * 实例对象和原型对象之间的联系:原型链,通过__proto__和prototype
    *
    * 实例对象的__proto__指向自己的构造函数的prototype,中也有__proto__,指向的是Object的prototype,中也有一个__proto__,指向的是null
    * 原型链:
    * 属性的使用:搜索的过程,首先在当前的实例对象中找这个属性,如果有则使用,如果没有则去该实例对象的__proto__指向的原型对象中搜素,如果有则使用,如果没有则undefined
    *
    * function Person(name){
    *   this.name=name;
    * }
    * Person.prototype.sex="男";
    * var per=new Person("小白");
    * //per.sex="女";
    * console.log(per.sex);//女--->sex属性是实例对象的,实例对象中如果没有就去原型对象中查找,补充:如果实例对象和原型对象中的属性名字一样,原型对象中的属性的值是不会被修改的,修改是实例对象中的属性
    *
    *  原型的作用:数据共享(节省内存空间),实现继承
    *  继承:类与类之间的关系,js中没有类的概念,js中可以模拟面向对象,可以使用构造函数来模拟类的概念,继承是通过原型来实现的
    *
    * 原型对象的指向是可以改变的
    * 实例对象的__proto__指向的是自己的构造函数的prototype,但是指向可以改变,为了继承
    *
    * js中的继承是通过改变原型对象的指向来实现的
    * 继承的方式:
    * 1.原型的继承:传递参数的时候,所有的实例对象的属性的值都一样了(缺陷)
    * 2.借用构造函数继承:不能使用父级的方法
    * 3.组合继承:通过借用构造函数实现属性的继承,通过原型的方式继承实现方法的继承
    * 4.拷贝继承:把一个对象A中的所有的属性和方法直接复制一份到对象B中,B对象中就有了对象A中所有的内容,从而实现继承
    *
    * 函数定义的方式:函数的声明,函数表达式,提示:尽可能的使用函数表达式的方式,或者说不要把函数的声明放在if的语句中
    *
    * 函数调用方式:
    * 1.普通模式:正常的定义函数和使用
    * 2.严格模式:"use strict";后面或者下面的代码都是严格的语法的方式
    * 严格模式中的函数中的this是undefined
    * 普通模式中的函数中的this是window
    * 函数此时如果是一个方法,(方法是通过对象来调用的),那么此时方法中的this是实例对象,调用该方法的对象
    * 如果此时的函数当成一个构造函数来使用(new 函数名),那么此时里面的this还是实例对象
    * 为元素绑定事件的时候,该事件中的this也是触发该事件的对象:按钮的点击事件,点击事件中的this就是当前的按钮
    * 定时器中传入的函数,函数中的this,实际上是window,因为定时器是window下的一个方法
    *
    * 目前的代码还是按照的普通的模式来写,
    * "use strict";这种严格模式,以后会慢慢的使用了
    *
    * 函数也是对象,但是对象不一定是函数:
    * 对象中有__proto__
    * 函数中有prototype
    * 如果一个东西里面只有__proto__,那就说明是对象
    * 如果一个东西里面只有prototype,那就说明是函数,但是肯定也是对象,里面肯定也会有__proto__
    * Math是对象,但不是函数
    *
    * 所有的函数都是Function的实例对象
    *
    * apply和call
    *
    * 都是方法,
    * 如何使用:
    * 函数想要使用apply或者call
    * 函数名.apply();
    * 函数名.call();
    * applye和call的作用:就是直接调用函数或者方法,改变里面的this的指向
    *
    * 还可以是方法名使用applye或者call
    * 对象.方法名.apply();
    * 对象.方法名.call();
    * 如果此时apply和call中一个参数也没有,或者是传入了一个参数null,那么对象的方法中的this还是这个实例对象
    * per.sayHi();//这里的this就是per对象
    * per.sayHi.apply(null);或者是per.sayHi.call(null);sayHi中的this还是per对象
    * per.sayHi.apply(dog);或者per.sayHi.call(dog);那么此时的sayHi中的this就是dog这个对象
    *
    *
    * 这两个方法中如果什么参数也没有,那么函数中的this就是window,如果传入的第一个参数是null,那么该函数中的this也是window
    * function f1(){
    *   console.log(this);
    * }
    * f1.apply();或者f1.call();或者f1.apply(null);或者f1.call(null)
    * 此时f1中的this就是window
    *
    * apply和call的第一个参数要么是null,要么是一个对象,
    * apply中的第二个参数是数组,数组中的每个元素就是每个参数
    * call中的第二个参数后面所有的参数都是一个一个传入的
    *
    * function f1(x,y,z){
    *
    * }
    * f1.apply(对象,[参数1,参数2,参数3]);
    * f1.call(对象,参数1,参数2,参数3);
    *
    * 总结:apply和call都可以改变this的指向,
    * 直接:别人的方法想要变成自己的,就使用apply或者call,传入自己的这个对象
   

2、原型及原型链
1)原型链是实例对象和原型对象之间的关系,关系是通过原型来联系的
图解:
在这里插入图片描述
2)原型的指向可以改变
构造函数及原型对象中的this就是实例对象
在这里插入图片描述
若此前为Student的构造函数的原型添加过相关属性及方法,则此时再使用则报错
在这里插入图片描述

在这里插入图片描述
3)原型最终指向的位置
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
4)原型指向改变后如何添加原型方法
需要先改变原型的指向再使用prototype添加原型方法
在这里插入图片描述
5)实例对象和原型对象的重名问题
在这里插入图片描述
6)神奇的原型链
在这里插入图片描述
7)继承
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
通过原型实现继承
在这里插入图片描述
使用
在这里插入图片描述

继承案例:
//动物的构造函数
function Animal(name,weight){
this.name=name;
this.weight=weight;
}
Animal.prototype.eat=function(){
console.log("eat");
};
//狗的构造函数
function Dog(color){
this.color=color;
}
Dog.prototype=new Animal("柯基","18");
Dog.prototype.bite=function(){
console.log(" bite");
};
//哈士奇
function.ErHa(sex){
this.sex=sex;
}
ErHa.prototype=new Dog(“black”);
ErHa.prototype.play=function(){
console.log("pla yl")
}
var ErHa=new ErHa("male");

8)原型链
在这里插入图片描述
9)借用构造函数继承
为了数据共享,改变原型指向,做到了继承,通过改变原型的指向实现继承
缺陷:因为改变原型指向的同时实现继承,继承过来的属性值都是一样的了,这就是问题。只能事后复制。但这样不好,写死了代码。
解决方法:继承时不用改变原型的指向,直接调用父级的构造函数的方式
来为属性赋值即可。把要继承的父级的构造函数拿过来用即可
借用构造函数:父级构造函数名.call(当前对象,属性1,属性2,…);

function Person(name,age){

}
function Student(name,age){
Person.call(this,name,age);//Person作为函数使用
}//可自己给值,但只继承了属性,方法未能继承

10)组合继承
即原型继承加借用构造函数继承
在这里插入图片描述
上面的改变原型指向来继承不传参,意味着属性未被继承,作废,但之前通过借用构造函数已经被继承过来了
10)拷贝继承
把一个对象中的属性和方法直接复制到另一个对象中
下面两图的改变地址指向并不是真正的拷贝
在这里插入图片描述
在这里插入图片描述
浅拷贝:
在这里插入图片描述
11)总结在这里插入图片描述
12)看代码中的继承部分判断原型的指向
构造函数首字母常大写
在这里插入图片描述
30在这里插入图片描述
在这里插入图片描述

3、高级函数
1)在这里插入图片描述
2)函数的角色
函数声明及函数表达式
函数声明:

function f1(){
...
}
f1();

函数表达式

var f=function(){
...
};
f();

函数声明和函数表达式之间的区别
函数声明如果放在if-else的语句中,在ie8中会出现问题。但使用函数的表达式则不会出现错误的情况
3)函数中的this
在这里插入图片描述
由上到下
①window
②当前的实例对象
③window
④实例对象
⑤实例对象
4)严格模式
“use strict” ;//严格模式
在此模式下函数调用一定要通过对象,而不能直接调用
放在所要限定的代码的最上面,之后的所有代码都要遵循严格模式
5)函数的不同调用方式
分为普通函数(函数名小括号直接调用),构造函数(通过new来创建对象后调用),对象的方法(对象.方法名小括号调用)
6)函数也是对象,但对象不一定是函数
如果一个东西里既有prototype又有下划线proto,说明是函数,也是对象
在这里插入图片描述
Function 原型指向的是Object的protocoltype
7)数组中的函数调用
数组可以存储任何类型的数据
在这里插入图片描述
一一调用
在这里插入图片描述

标题SpringBoot智能在线预约挂号系统研究AI更换标题第1章引言介绍智能在线预约挂号系统的研究背景、意义、国内外研究现状及论文创新点。1.1研究背景与意义阐述智能在线预约挂号系统对提升医疗服务效率的重要性。1.2国内外研究现状分析国内外智能在线预约挂号系统的研究与应用情况。1.3研究方法及创新点概述本文采用的技术路线、研究方法及主要创新点。第2章相关理论总结智能在线预约挂号系统相关理论,包括系统架构、开发技术等。2.1系统架构设计理论介绍系统架构设计的基本原则和常用方法。2.2SpringBoot开发框架理论阐述SpringBoot框架的特点、优势及其在系统开发中的应用。2.3数据库设计与管理理论介绍数据库设计原则、数据模型及数据库管理系统。2.4网络安全与数据保护理论讨论网络安全威胁、数据保护技术及其在系统中的应用。第3章SpringBoot智能在线预约挂号系统设计详细介绍系统的设计方案,包括功能模块划分、数据库设计等。3.1系统功能模块设计划分系统功能模块,如用户管理、挂号管理、医生排班等。3.2数据库设计与实现设计数据库表结构,确定字段类型、主键及外键关系。3.3用户界面设计设计用户友好的界面,提升用户体验。3.4系统安全设计阐述系统安全策略,包括用户认证、数据加密等。第4章系统实现与测试介绍系统的实现过程,包括编码、测试及优化等。4.1系统编码实现采用SpringBoot框架进行系统编码实现。4.2系统测试方法介绍系统测试的方法、步骤及测试用例设计。4.3系统性能测试与分析对系统进行性能测试,分析测试结果并提出优化建议。4.4系统优化与改进根据测试结果对系统进行优化和改进,提升系统性能。第5章研究结果呈现系统实现后的效果,包括功能实现、性能提升等。5.1系统功能实现效果展示系统各功能模块的实现效果,如挂号成功界面等。5.2系统性能提升效果对比优化前后的系统性能
在金融行业中,对信用风险的判断是核心环节之一,其结果对机构的信贷政策和风险控制策略有直接影响。本文将围绕如何借助机器学习方法,尤其是Sklearn工具包,建立用于判断信用状况的预测系统。文中将涵盖逻辑回归、支持向量机等常见方法,并通过实际操作流程进行说明。 一、机器学习基本概念 机器学习属于人工智能的子领域,其基本理念是通过数据自动学习规律,而非依赖人工设定规则。在信贷分析中,该技术可用于挖掘历史数据中的潜在规律,进而对未来的信用表现进行预测。 二、Sklearn工具包概述 Sklearn(Scikit-learn)是Python语言中广泛使用的机器学习模块,提供多种数据处理和建模功能。它简化了数据清洗、特征提取、模型构建、验证与优化等流程,是数据科学项目中的常用工具。 三、逻辑回归模型 逻辑回归是一种常用于分类任务的线性模型,特别适用于二类问题。在信用评估中,该模型可用于判断借款人是否可能违约。其通过逻辑函数将输出映射为0到1之间的概率值,从而表示违约的可能性。 四、支持向量机模型 支持向量机是一种用于监督学习的算法,适用于数据维度高、样本量小的情况。在信用分析中,该方法能够通过寻找最佳分割面,区分违约与非违约客户。通过选用不同核函数,可应对复杂的非线性关系,提升预测精度。 五、数据预处理步骤 在建模前,需对原始数据进行清理与转换,包括处理缺失值、识别异常点、标准化数值、筛选有效特征等。对于信用评分,常见的输入变量包括收入水平、负债比例、信用历史记录、职业稳定性等。预处理有助于减少噪声干扰,增强模型的适应性。 六、模型构建与验证 借助Sklearn,可以将数据划分为训练和测试,并通过交叉验证调整参数以提升模型性能。常用评估指标包括准确率、召回率、F1值以及AUC-ROC曲线。在处理不平衡数据时,更应关注模型的召回率与特异性。 七、成学习方法 为提升模型预测能力,可采用成策略,如结合多个模型的预测结果。这有助于降低单一模型的偏差与方差,增强整体预测的稳定性与准确性。 综上,基于机器学习的信用评估系统可通过Sklearn中的多种算法,结合合理的数据处理与模型优化,实现对借款人信用状况的精准判断。在实际应用中,需持续调整模型以适应市场变化,保障预测结果的长期有效性。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值