js高级 -01

JavaScript系列-4-函数进阶 本文作者:钟昕灵,叩丁狼高级讲师。原创文章,转载请注明出处。 作用域安全的构造函数 构造函数的调用方式存在下面两种: ​ 直接调用:普通函数 ​ 使用new一起调用:创建对象 function Person(name, age) { this.name = name; this.age = age; } console.log(Person("zs", 10));//undef... 阅读详情

1.构造函数和原型
1.1对象的三种创建方式--复习
1. 字面量方式

var obj = {};


2. new关键字

var obj = new Object();


3. 构造函数方式

function Person(name,age){
this.name = name;
this.age = age;
}
var obj = new Person('zs',12);


1.2静态成员和实例成员
1.2.1实例成员
实例成员就是构造函数内部通过this添加的成员 如下列代码中uname age sing 就是实例
成员,实例成员只能通过实例化的对象来访问

function Star(uname, age) {
this.uname = uname;
this.age = age;
this.sing = function() {
console.log('我会唱歌');
}
}
var ldh = new Star('刘德华', 18);
console.log(ldh.uname);//实例成员只能通过实例化的对象来访问

1.2.2静态成员
静态成员 在构造函数本身上添加的成员 如下列代码中 sex 就是静态成员,静态成员只能
通过构造函数来访问

function Star(uname, age) {
this.uname = uname;
this.age = age;
this.sing = function() {
console.log('我会唱歌');
}
}
Star.sex = '男';
var ldh = new Star('刘德华', 18);
console.log(Star.sex);//静态成员只能通过构造函数来访问

 

1.3构造函数的问题
构造函数方法很好用,但是存在浪费内存的问题。

 

1.4构造函数原型prototype
构造函数通过原型分配的函数是所有对象所共享的。
JavaScript 规定,每一个构造函数都有一个prototype 属性,指向另一个对象。注意这个
prototype就是一个对象,这个对象的所有属性和方法,都会被构造函数所拥有。
我们可以把那些不变的方法,直接定义在 prototype 对象上,这样所有对象的实例就可
以共享这些方法。

function Star(uname, age) {
this.uname = uname;
this.age = age;
}
Star.prototype.sing = function() {
console.log('我会唱歌');
}
var ldh = new Star('刘德华', 18);
var zxy = new Star('张学友', 19);
ldh.sing();//我会唱歌
zxy.sing();//我会唱歌

 

1.5对象原型

对象都会有一个属性 __proto__ 指向构造函数的 prototype 原型对象,之所以我们对象
可以使用构造函数 prototype 原型对象的属性和方法,就是因为对象有 __proto__ 原型
的存在。
__proto__对象原型和原型对象 prototype 是等价的
__proto__对象原型的意义就在于为对象的查找机制提供一个方向,或者说一条路线,但是
它是一个非标准属性,因此实际开发中,不可以使用这个属性,它只是内部指向原型对象
prototype

1.6constructor构造函数
对象原型( __proto__)和构造函数(prototype)原型对象里面都有一个属性
constructor 属性 ,constructor 我们称为构造函数,因为它指回构造函数本身。
constructor 主要用于记录该对象引用于哪个构造函数,它可以让原型对象重新指向原来
的构造函数。
一般情况下,对象的方法都在构造函数的原型对象中设置。如果有多个对象的方法,我们可
以给原型对象采取对象形式赋值,但是这样就会覆盖构造函数原型对象原来的内容,这样修
改后的原型对象 constructor 就不再指向当前构造函数了。此时,我们可以在修改后的
原型对象中,添加一个 constructor 指向原来的构造函数。
 

如果我们修改了原来的原型对象,给原型对象赋值的是一个对象,则必须手动的利用
constructor指回原来的构造函数如:

function Star(uname, age) {
this.uname = uname;
this.age = age;
}
// 很多情况下,我们需要手动的利用constructor 这个属性指回 原来的构造函数
Star.prototype = {
// 如果我们修改了原来的原型对象,给原型对象赋值的是一个对象,则必须手动的利用
constructor指回原来的构造函数
constructor: Star, // 手动设置指回原来的构造函数
sing: function() {
console.log('我会唱歌');
},
movie: function() {
console.log('我会演电影');
}
}
var zxy = new Star('张学友', 19);
console.log(zxy)

 

1.7原型链
每一个实例对象又有一个proto属性,指向的构造函数的原型对象,构造函数的原型
对象也是一个对象,也有proto属性,这样一层一层往上找就形成了原型链。

 

1.8构造函数实例和原型对象三角关系

1.构造函数的prototype属性指向了构造函数原型对象
2.实例对象是由构造函数创建的,实例对象的__proto__属性指向了构造函数的原型对象
3.构造函数的原型对象的constructor属性指向了构造函数,实例对象的原型的
constructor属性也指向了构造函数

 

1.9原型链和成员的查找机制
1.构造函数的prototype属性指向了构造函数原型对象
2.实例对象是由构造函数创建的,实例对象的__proto__属性指向了构造函数的原型对象
3.构造函数的原型对象的constructor属性指向了构造函数,实例对象的原型的
constructor属性也指向了构造函数
任何对象都有原型对象,也就是prototype属性,任何原型对象也是一个对象,该对象就
有proto属性,这样一层一层往上找,就形成了一条链,我们称此为原型链;

 

当访问一个对象的属性(包括方法)时,首先查找这个对象自身有没有该属性。
如果没有就查找它的原型(也就是 __proto__指向的 prototype 原型对象)。
如果还没有就查找原型对象的原型(Object的原型对象)。
依此类推一直找到 Object 为止(null)。
__proto__对象原型的意义就在于为对象成员查找机制提供一个方向,或者说一条路线。

 

 

1.10原型对象中this指向
构造函数中的this和原型对象的this,都指向我们new出来的实例对象

 

function Star(uname, age) {
this.uname = uname;
this.age = age;
}
var that;
Star.prototype.sing = function() {
console.log('我会唱歌');
that = this;
}
var ldh = new Star('刘德华', 18);
// 1. 在构造函数中,里面this指向的是对象实例 ldh
console.log(that === ldh);//true
// 2.原型对象函数里面的this 指向的是 实例对象 ldh

 

1.11通过原型为数组扩展内置方法

Array.prototype.sum = function() {
var sum = 0;
for (var i = 0; i < this.length; i++) {
sum += this[i];
}
return sum;
};
//此时数组对象中已经存在sum()方法了 可以始终 数组.sum()进行数据的求

 

2.继承
2.1call()
call()可以调用函数
call()可以修改this的指向,使用call()的时候 参数一是修改后的this指向,参数2,参数3..
使用逗号隔开连接

function fn(x, y) {
console.log(this);
console.log(x + y);
}
var o = {
name: 'andy'
};
fn.call(o, 1, 2);//调用了函数此时的this指向了对象o

 

2.2子构造函数继承父构造函数中的属性
1. 先定义一个父构造函数
2. 再定义一个子构造函数
3. 子构造函数继承父构造函数的属性(使用call方法)

// 1. 父构造函数
function Father(uname, age) {
// this 指向父构造函数的对象实例
this.uname = uname;
this.age = age;
}
// 2 .子构造函数
function Son(uname, age, score) {
// this 指向子构造函数的对象实例
3.使用call方式实现子继承父的属性
Father.call(this, uname, age);
this.score = score;
}
var son = new Son('刘德华', 18, 100);
console.log(son);

 

2.3借用原型对象继承方法
1. 先定义一个父构造函数
2. 再定义一个子构造函数
3. 子构造函数继承父构造函数的属性(使用call方法)

// 1. 父构造函数
function Father(uname, age) {
// this 指向父构造函数的对象实例
this.uname = uname;
this.age = age;
}
Father.prototype.money = function() {
console.log(100000);
};
// 2 .子构造函数
function Son(uname, age, score) {
// this 指向子构造函数的对象实例
Father.call(this, uname, age);
this.score = score;
}
// Son.prototype = Father.prototype; 这样直接赋值会有问题,如果修改了子原型对
象,父原型对象也会跟着一起变化
Son.prototype = new Father();
// 如果利用对象的形式修改了原型对象,别忘了利用constructor 指回原来的构造函数
Son.prototype.constructor = Son;
// 这个是子构造函数专门的方法
Son.prototype.exam = function() {
console.log('孩子要考试');
}
var son = new Son('刘德华', 18, 100);
console.log(son);

 

3.ES5新增方法
3.1数组方法forEach遍历数组
3.2数组方法filter过滤数组
3.3数组方法some
arr.forEach(function(value, index, array) {
//参数一是:数组元素
//参数二是:数组元素的索引
//参数三是:当前的数组
})
//相当于数组遍历的 for循环 没有返回值

 

3.2数组方法filter过滤数组

var arr = [12, 66, 4, 88, 3, 7];
var newArr = arr.filter(function(value, index,array) {
//参数一是:数组元素
//参数二是:数组元素的索引
//参数三是:当前的数组
return value >= 20;
});
console.log(newArr);//[66,88] //返回值是一个新数组


3.3数组方法some
some 查找数组中是否有满足条件的元素
var arr = [10, 30, 4];
var flag = arr.some(function(value,index,array) {
//参数一是:数组元素
//参数二是:数组元素的索引
//参数三是:当前的数组
return value < 3;
});
console.log(flag);//false返回值是布尔值,只要查找到满足条件的一个元素就立马终止
循环

 

3.5some和forEach区别
如果查询数组中唯一的元素, 用some方法更合适,在some 里面 遇到 return true 就
是终止遍历 迭代效率更高
在forEach 里面 return 不会终止迭代

 


3.6trim方法去除字符串两端的空格

var str = ' hello '
console.log(str.trim()) //hello 去除两端空格
var str1 = ' he l l o '
console.log(str.trim()) //he l l o 去除两端空格
 

3.7获取对象的属性名

Object.keys(对象) 获取到当前对象中的属性名 ,返回值是一个数组

var obj = {
id: 1,
pname: '小米',
price: 1999,
num: 2000
};
var result = Object.keys(obj)
console.log(result)//[id,pname,price,num]

 

3.8Object.defineProperty

Object.defineProperty设置或修改对象中的属性

Object.defineProperty(对象,修改或新增的属性名,{
value:修改或新增的属性的值,
writable:true/false,//如果值为false 不允许修改这个属性值
enumerable: false,//enumerable 如果值为false 则不允许遍历
configurable: false //configurable 如果为false 则不允许删除这个属性
属性是否可以被删除或是否可以再次修改特性
})

NWD 格式转换 STL 全流程:专业方案与迪威模型网在线转换详解 在3D模型处理中,将NWD文件转换为STL格式是常见的需求,特别是在3D打印和计算机辅助制造等领域。NWD文件由Autodesk开发,主要用于建筑、工程和施工行业,包含丰富的几何图形和材质信息,但因其专有格式和大文件大小,限制了其应用范围。相比之下,STL格式广泛应用于3D打印,仅包含表面几何信息。转换NWD到STL的原因包括拓展模型应用场景和便于模型编辑。转换方法包括使用专业软件如Autodesk Navisworks配合Blender或3ds Max,或使用专门的转换工具如CADExchanger。 阅读详情

相关推荐

光模块数字诊断监控(DDM)功能

DDM(Digital Diagnostic Monitoring)数字诊断监控,由行业组织SFF Committee制定,遵循SFF-8472多源协议定义的标准参数而工作,规范了光模块和网络设备的软硬件所需遵循的标准数值或范围,确保了网络设备供应商和光模块供应商之间所提供产品的互操作性不同。:通过监测激光器的偏置电流来预测激光器的劣化,从而确保在故障发生之前将业务切换到备用链路上或替换有可能故障的光模块,因此起到了预测光模块寿命的作用。光模块DDM信息可以通过SNMP读取光模块的接收光功率和发射光功率。.

光模块的博客 2300

原型及原型链

首先,为什么需要原型及原型链? 我们查看一个例子: function Person(name, age) { this.name = name; this.age = age; this.eat = function() { console.log(age + "岁的" + name + "在吃饭。"); } } let p1 = new Person("jsliang", 24); let p2 = new Person("jsliang", 24); console.l

weixin_40579884的博客 260

别再被无限debugger卡住了!Chrome DevTools实战绕过技巧(含Hook与文件替换)

本文详细介绍了如何通过Chrome DevTools绕过无限debugger封锁的实战技巧,包括Hook技术与文件替换方法。针对常见的定时器轰炸、循环陷阱和动态注入等反调试手段,提供了高效的解决方案,帮助开发者快速突破调试障碍,提升爬虫和逆向工程效率。

weixin_30326515的博客 242

JS面向对象

目录 一、构造函数 二、对象成员 2.1、实例成员 2.2、静态成员 三、instanceof 四、constructor 五、原型对象 5.1、原型关系 5.2、原型属性 5.3、原型链 5.4、原型总结 六、对象创建 6.1、对象字面量创建 6.1.1、new构造函数创建 6.1.2、字面量创建 6.1.3、create创建 6.2、工厂模式 6.3、构造函数模式 6.4 构造函数拓展模式 6.5 寄生构造函数模式 6.6、稳妥构造函数模式 6.7、原型模式

mengfanshaoxia的博客 1388

面向多目标跟踪的数据关联方法研究综述

摘要:多目标跟踪技术在军事和民用领域具有广泛应用,其核心挑战在于数据关联问题。本文系统梳理了数据关联的主要解决方法,首次将经典算法分为确定性关联和概率性关联两大类。确定性关联(如NNDA、GNN、MHT)采用"硬分配"策略,计算效率高但易受噪声干扰;概率性关联(如PDA、JPDA、PMHT)通过"软分配"处理不确定性,更适合复杂场景。文章详细分析了各类算法的原理、适用条件和优缺点,并探讨了智能学习等新兴技术在视觉跟踪等领域的应用。研究指出,尽管随机集滤波等新方法出现,

qq_43416206的博客 1141

llama factory

NOTE] 除上述链接以外的其他网站均为未经许可的第三方网站,请小心甄别。

thesky123456的博客 1273

JavaScript中的一等公民: 函数(Function)

函数的基础使用使用函数表达式或者函数声明去创建一个函数函数声明整体提升,函数表达式只提升变量匿名函数构造函数构造函数返回一个对象,使用new操作符执行构造函数构造函数执行的过程:1. 生成一个对象将this绑定到这个对象 2. 执行构造函数的代码 3.返回结果构造函数默认返回一个对象,手动返回应用类型的数据将代替默认的返回结果闭包闭包产生的三个条件:1. 函数嵌套 2.内部函数使用了外部函数作用域内的变量 3.被返回的内部函数在外部作用域有被引用。

qq_44621394的博客 655

Cadence OrCAD Capture 软件自带元件原理图符号库目录与介绍图文视频教程

硬件工程师在开始原理图设计时,应该首先拥有自己的元件原理图符号库。基于Capture进行原理图设计的一个很大的优点就是,软件自带的元件库比较全。本文简单介绍Capture软件自带元件库。

fydar的博客 5579

javascript 基础练习题及答案(六)

一、单选题(共30题,每题2分) 1.不属于同源策略限制条件的 A 端口 B 协议 C 域名 D 网址 正确答案: D 2.不属于常见23种设计模式 A 单例 B MVC C 观察者 D 策略 正确答案: B 3.有代码 function Foo(){}; var foo = new Foo(); 下列表达式运算结果为true的选项为 A Foo.prototype == Foo.proto B foo.prototype == Foo.proto C foo.proto == Foo

Hi_Eleven的博客 8280

基于STM32L4XX、HAL库的 ATGM336H GPS定位模块驱动程序设计

/ 转换为km/h。// 定位状态: 0=无效, 1=GPS定位, 2=差分定位。// GPS解析数据。支持GPS/BeiDou/GLONASS/Galileo/QZSS多系统联合定位。// 回调函数(需要在HAL_UART_RxCpltCallback中调用)// 地面速度(km/h)// 海拔高度(m)

zhusl6688的博客 794

yolov5 FPGA实现及verilog代码仿真

本文介绍了一种基于FPGA的卷积神经网络加速器设计,采用混合架构实现网络功能。该系统将训练和图像预处理等复杂计算保留在PC端执行,仅将主干网络部署在FPGA上。由于片上资源限制,建议通过外接DDR存储扩展容量。文章提供了完整的Verilog HDL源码,包括卷积单元(convUnit)、卷积层(convLayerSingle)和处理单元(processingElement)等核心模块,均已通过仿真验证。该设计采用流水线结构,使用浮点运算单元实现卷积计算,支持32x32图像输入和5x5卷积核处理。系统架构图中

QQ_778132974的博客 576

【JS高级语法】JavaScript进阶Day01

JS作用域、JS垃圾回收机制、垃圾回收算法、闭包、变量提升、函数提升、动态参数、剩余参数、展开运算符、箭头函数、箭头函数参数、箭头函数this、数组结构、对象解构、forEach遍历数组、filter筛选数组

学习是最低成本的投资 1173

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

JavaScript高级(JS高级)01:ES5中面向对象的实现

最近在学习JS高级的部分,所以在这里做一个学习笔记~! 前言: 虽然在JavaScript中我们可以自定义”对象“,但必须肯定的是,JS本身就不是为面向对象而生的语言;在ES6之前,JavaScript中并没有”class“关键字,类的实现是通过构造函数模拟的,而类的继承是通过call()方法模拟实现的。 1、使用构造函数实现父类Father(类名最好大写噢!) function Father(name,age){ this.name = name; thi...

Giser的辛酸 430

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

JavaScript高级——01

目录 1.构造函数和实例对象之间的关系 2.原型的引入 3.通过简单例子体会面向过程和面向对象的编程思想 4.构造函数、实例对象、原型对象三者之间的关系 5.利用原型共享数据 6.原型中的方法 7.实例对象使用属性和方法的层层搜索 8.为内置对象添加原型方法 9.把局部变量变成全局变量 9.1 产生随机数对象 9.2 随机小方块 动态页面:(这两种都是) 1.页面由htm......

Galaksen的博客 223

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

JavaScript高级程序设计(第3版)阅读笔记第01天-js简介

第2章在HTML中使用JavaScript本章内容*使用<script>元素*嵌入脚本与外部脚本*文档模式对JavaScript的影响*考虑禁用JavaScript的场景2.1<script>元素HTML4.01为<script>定义了下列6个属性  *async:可选。表示应该立即下载脚本,但不妨碍页面中的其他操作。只对外部脚本文件有效。  *charset:可选。表示通过src属性制定的代码的字

stubbor的博客 820

JavaScript高级01

学习目标: 理解面向对象开发思想 掌握 JavaScript 面向对象开发相关模式 掌握在 JavaScript 中使用正则表达式 typora-copy-images-to media JavaScript 高级 在线地址:JavaScript 高级 理解面向对象开发思想 掌握 JavaScript 面向对象开发相关模式 掌握在 JavaScript 中使用正则表达式 演示 贪吃...

www294993741的博客 501

js高级day01

课程介绍 课程大纲 学习目标 理解面向对象开发思想 掌握 JavaScript 面向对象开发相关模式 掌握在 JavaScript 中使用正则表达式 案例演示 贪吃蛇案例 学习资源 JavaScript 高级程序设计(第三版) 前端的红宝书 建议每一个前端都完整的看一遍 JavaScript面向对象编程指南(第2版) JavaScript面向对象精要 JavaScript 权威指南 ...

qq_41100700的博客 180

JavaScript高级第01天笔记

JavaScript高级第01天笔记 1.面向过程与面向对象 1.1面向过程 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候再一个一个的依次调用就可以了。 1.2面向对象 面向对象是把事务分解成为一个个对象,然后由对象之间分工与合作。 1.3面向过程与面向对象对比 面向过程 面向对象 优点 性能比面向对象高,适合跟硬件联系很紧密的东西...

weixin_46261309的博客 143

JavaScript高级(01)

前端开发工具 1.1、 WebStorm介绍和下载 l 介绍 WebStorm是JetBrains 推出的一款强大的HTML5编辑工具,拥有丰富的代码快速编辑,可以智能的补全代码、代码格式化、html提示以及代码检查和快速修复等,支持不同浏览器的提示,同时也是一款JavaScript 开发工具,拥有即时编辑(chrome)、自动完成、debugger、Zen Coding、...

aaqqww1123的博客 184

js高级01-基础深入

因为在javaScript中,不同的对象都是使用二进制存储的,如果二进制前三位都是0的话,系统会判断为是Object类型,而null的二进制全是0,自然也就判断为Object。

qq_60060362的博客 2146

(更新时间)2021年07月01日 JavaScript高级篇 mock.js的使用方法

const Mock = require('mockjs') const data = Mock.mock({ //定义数据生成规则 'memberList|2-6': [ { 'id|+1': 2, // 自增长1 ,初始值为2, 'name|1-3': '小梦', // 随机生成1到3个重叠小梦 'name|2': '小梦' 生成2个小梦 'phone|11': '8', // 888888888

愚公智库 56万+

深入JavaScript高级语法-01-浏览器原理-v8引擎-js执行原理

浏览器原理-v8引擎-js执行原理 JavaScript的重要性 JavaScript是前端万丈高楼的根基 JavaScript在工作中至关重要 前端的未来依然是JavaScript 著名的Atwood定律 任何可以使用JavaScript来实现的应用都最终都会使用JavaScript实现 JavaScript应用越来越广泛 web开发 移动端开发 小程序端开发 桌面应用开发 后端开发 JavaScript让人迷惑的知识点 作用域 函数、闭包 面向对象 ES新特性 其他一系列知识 TypeS

coderlb的博客 995

01.JavaScript高级

-----------------基础总结深入 01.数据类型 01.数据类型的分类和判断 基本(值)类型 Number ----- 任意数值 -------- typeof String ----- 任意字符串 ------ typeof Boolean ---- true/false ----- typeof undefined — undefined ----- typeof/=== null -------- null ---------- === 对象(引用)类型 Object --

a2274001782的博客 334

【JavaScript高级01】JavaScript基础深入

1,数据类型 JavaScript将数据分为六大类型,分别为数值类型(number)、字符串类型(string)、布尔类型(boolean)、undefined(定义未赋值)、null(赋值为空值)、应用类型。其中引用类型可分为普通对象,Function、Array。Function,Array都是属于特殊的对象。 typeof可以用来判断一个变量的数据类型: var a document.write(typeof a+"____") var a=12 document.write(typeof a

qq_31539817的博客 251

js高级01

js高级01

m0_64494670的博客 420
上一篇: 图片跟随鼠标移动效果和动态创建表格效果
下一篇: 简单版商品查询效果
Sole Memory°
博客等级 码龄7年 5粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值