建立优美的面向对象JS编程风格

由于js语言自身语法的灵活性,使得在js程序中出现了各种各样的代码风格,但也正因为如此,导致了代码的可读性和可维护性大大降低,特别随着项目的不断更新,js代码的不断增多,到后期维护时甚至连自己写的代码都不知所以然了,因此确定一种好的代码风格是很有必要的。

近两年随着ajax的兴起,js变得越来越受“重用”,js开始在web开发中中充当着非常重要的角色,因此也开始遇到了各种各样的问题。于是很多牛人们就提出了js的面向对象编程方法。

使用面向对象的编程思想实现js代码其实也并不难,实现方法也又多种,比如prototype原型,new object()等方法。前面的每个方法都有其自己的优缺点,但都存在一个问题,那就是对于js变量作用域的控制。如果不能很好控制js变量作用域,就可能导致对象内部变量被外部肆意修改,从而导致程序被破坏,不便于程序的维护,对象的封装特性和程序健壮性都大打折扣。被由于js本身没有很好的对变量范围的定义(public/private等限定符),因此在js的面向对象编程中也就遇到了变量的控制问题,特别是对于对象内部的公有变量在prototype原型方法中都很难实现。

如下面一段程序:


function testCls(a){
this.a=a;
}
testCls.prototype.alertA=function(){
alert(this.a);
}
var test=new testCls(5);
test.alertA(); //弹出5
alert(test.a); //同样弹出5


要在其方法alertA中显示对象的内部公用变量a的值就必须在构造函数中通过this赋值,然后在方法中通过this引用。这样本身是没有什么问题,但这样a变量其实就成了一个全局变量,任何testCls的对象都可以直接引用到a,如上例中通过test.a获取到a的值。但很多时候我们并不希望一些对象变量对外公开,即不允许外部程序访问。这应该如何实现呢?如何才能实现一种更好的面向对象编程方式呢?

当然我们可能都会想到这种方式:


var testCls=function(arg1){
var a=arg1;
var b=10;
var alertB=function(){
alert(b);
}
this.c=5;
this.setA=function(v){
a=v;
};
this.alertA=function(){
alert(a);
};
this.alertB=function(){
alertB();
}
}

var test=new testCls(4);
test.setA(6);
test.alertA();
test.alertB();
这样其实也很好解决了上面提到的问题,但是总又点不雅观,所有变量和方式都混杂在一起看起来很难区分哪些是可以公开访问哪些是不允许公开访问的,哪些是对象的私有变量和公开变量。这样在可读性上就有点差强人意了,我们可以去寻找一种更为雅观的实现方式。

其实只要利用js的闭包特性这个问题就很好搞定了,这也是俺从ext的源码中学习到的。

示例代码如下:


var testCls=function(arg1){
//对象内部公有变量,不允许外部访问
var a=arg1;
var b=10;
var alertB=function(){
alert(b);
}

//外部可访问区域
return {
c:5,
setA:function(v){
a=v;
},
alertA:function(){
alert(a);
},
alertB:function(){
alertB();
}
}
};

var test=new testCls(4);
test.setA(6);
test.alertA();
test.alertB();


同样的实现上面的功能,而且将对象私有变量和公有变量完全分开区域,一目了然,很容易区分出哪些是私有变量哪些是公有变量,这样程序的可读性就得到了大大的提高,而且对对象变量也得到了很好的控制。

如此优美的实现方法,真的让我们不得不叹服js的伟大,当然也要赞一下Extjs的开发者们。
ES6学习笔记(三):教你用js面向对象思维来实现 tab栏增删改查功能 前两篇文章主要介绍了类和对象、类的继承,如果想了解更多理论请查阅《ES6学习笔记(一):轻松搞懂面向对象编程、类和对象》、《ES6学习笔记(二):教你玩转类的继承和类的对象》,今天主要来分享关于如何用js面向对象的思维来实现tab栏的一些相关的功能。 文章目录要实现的功能分析切换功能添加功能实现删除功能编辑功能总结 要实现的功能分析 点击tab栏可以切换效果 点击+号,可以添加tab项和内容项 点击X号,可以删除当前的tab项和内容项 点击tab文字或者内容项文字,可以修改里面的字体内容 抽像对象: Tab对象 (增删改查功能)实现功能效果如下图:首先建立一个class 类Tab: let t 立即下载

相关推荐

zynq-7000学习笔记(八)——USB摄像头图像采集

PC平台:WINDOWS 10 64位 Xilinx设计开发套件:Xilinx_vivado_sdk_2015.4 开发板:Zed Board USB摄像头:罗技 C270(720P) linux源码:2016_R1 一、配置linux,支持UVC       如果是中星微的ZC3XX系列的芯片,则要进到GSPCA把ZC3XX的驱动选上

luotong86的专栏 1万+

js面向对象编程思想

一、编程思想 面向过程:所有事情都是亲力亲为,注重的是过程 面向对象:提出需求,找对象,对象解决,注重的是结果 创建一个对象,给这个对象,添加上属性和属性值,还有函数等方法,之后通过操作这个对象,来完成需要的效果 简单理解: 之前是将程序,封装在函数内,设定参数和返回值 现在是将程序,封装在对象内,设定对象的属性和方法 面向对象的特征:封装,继承,多态 二、创建对象的方式: 1,调用系统Obeje...

weixin_43310703的博客 1887

MedicalNet实战:3D医疗影像分割从零到部署(PyTorch+ResNet50)

本文详细介绍了基于PyTorch和MedicalNet预训练模型进行3D医疗影像分割的完整实战流程。通过加载ResNet50预训练权重进行迁移学习,大幅降低了对标注数据量的需求,并提升了模型性能。文章涵盖了从数据准备、模型微调、训练优化到最终部署的每一步,为医疗AI开发者提供了从零到部署的清晰指南。

weixin_29062671的博客 588

理解JavaScript面向对象编程思想

0 写在前面的话 大多数的面向对象编程语言中,比如C++和Java,在使用他们完成任务之前,必须创建类(class)。但在JavaScript中并不需要或者说不强制使用类。 面向对象都有如下几种特性: 封装 数据可以和数据操作的功能组织在一起 聚合 一个对象可以引用另一个对象 继承 一个新创建的对象和另一个对象拥有同样的特性,而无需显示复制功能 多态 一个接口可以被多个对象实现 1 一切都是对象 “一切都是对象”这句话的重点在于如何去理解“对象”这个概念。 ——当然,也不是所有的都是对象

efew212efe的博客 1283

用Java实现森林冰火人游戏

g.drawString("游戏结束", CELL_SIZE * COLS / 2 - 100, CELL_SIZE * ROWS / 2);g.drawString("难度级别: " + difficultyLevel, 10, CELL_SIZE * ROWS + 60);g.drawString("生命值: " + playerHealth, 10, CELL_SIZE * ROWS + 20);setTitle("森林冰火人");

2401_82778412的博客 1734

WPF插件架构-如何动态加载封装好的第三方DLL的界面

插件架构中如何自动加载第三方DLL中的UI界面

lg24k的博客 1882

JavaScript高级学习笔记之全面解析面向对象

1、什么是对象 万物皆对象 2、对象的特征 对象的特征就是用来描述对象的相关信息 比如一个人对象,特征就有:name age gender height 3、对象的行为 对象行为就是描述对象的行为 比如一个人对象,行为就有:吃 跑 跳 睡 唱 抽烟 喝酒 烫头 4、 什么是对象 键值对儿的组合就是对象 5、对象的属性! 现实生活中的对象的特征对应到JS当中是对象的属性(名词...

June.1 502

英飞凌TC377的Flash管理、UCB配置与HSM安全机制解析

本文深入解析了英飞凌TC377微控制器的Flash存储结构、UCB配置机制与HSM安全模块。详细阐述了带Cache与不带Cache的PFlash地址访问差异、利用SOTA与AB Swap实现无感OTA更新的原理,以及如何通过UCB安全配置启动流程与写保护。重点剖析了HSM硬件安全模块在密钥管理、安全启动与安全OTA中的核心作用,为开发高可靠性嵌入式系统提供实战指南。

weixin_29170327的博客 523

【JS】JS进阶--编程思想、面向对象构造函数、原型、深浅拷贝、异常处理、this处理、防抖节流

JavaScript 进阶知识涵盖了面向对象编程的核心概念、原型系统、高级函数技巧以及性能优化策略。掌握这些内容对于编写高质量、可维护的 JavaScript 代码至关重要:面向对象思想帮助组织复杂代码结构、原型与继承是 JavaScript 独特而强大的特性 深浅拷贝正确处理对象复制,避免意外修改、异常处理提升代码健壮性、this 机制是理解、JavaScript 执行上下文的关键、防抖节流优化高频事件性能

weixin_75257080的博客 709

【物联网】基于LORA组网的远程环境监测系统设计(ThingsCloud云平台版)_资料编号34

实现一主多从的LORA组网远程通信,主机和两个从机都配备了STM32F103单片机与 LoRa 模块,主机作为中心设备及WIFI网关,负责接收和发送数据到远程物联网平台和手机APP,两个从机则负责采集数据并通过各自的 LoRa组网将数据发送给主机。

嵌入式阿齐Archie 1万+

Flutter应用安卓逆向之hook分析研究---附dart版本对照表(必看篇)

搜索md5、rsa、aes等关键字分析要破解的加密算法,使用frida进行hook可疑函数的偏移地址。,双击进去找到ssl_crypto_x509_session_verify_cert_chain函数的偏移地址进行hook掉;Flutter应用是内置进行ssl证书校验的,无法通过常规方法抓到包,需要通过frida把它内置的ssl校验hook掉。重构完成后会生成新的apk,把它安装到模拟器或者真机中并打开运行,此时系统会在。关键字的函数进行hook(因为其返回的是字符串类型)中,拖进ide搜索字符串。

云霄IT的博客 8441

javascript-面向对象编程-[[prototype]]

前言 今天和大家探讨一下JavaScript-面向对象编程思想。本着学习交流心态,欢迎评论区抢座交流 ???? 在讲JavaScript面向对象之前得引荐一下JavaScript的面向类设计模式的荒唐史.(es没有类的概念,es6 class关于类实现仅仅是语法糖而已) 基于类的语言 (如 Java 或 C++) 的开发人员来说,JavaScript 有点令人困惑,因为它是动态的,并且本身不提供一个 c...

347

用 SAP ABAP ALV 重塑 SM30:可扩展的自定义表维护视图与自动传输实践

文章摘要: 本文提出了一种基于ALV Grid的动态表维护框架,用于替代传统SM30维护视图。该方案通过输入表名自动生成维护界面,支持动态筛选、批量操作和自动传输管理。核心设计包括:利用BAdI实现扩展点、通过行状态字段简化数据变更跟踪、使用Style Table控制单元格编辑权限、集成CTS实现自动传输。相比SM30标准维护,该框架显著提升了交互体验(支持ALV排序/过滤/汇总)和业务扩展性(统一校验与权限控制),同时解决了"维护+传输"流程割裂的问题。文中详细阐述了技术实现方案,并提

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 318

JavaScript面向对象编程

优美的面向对象JS编程风格var testCls=function(arg1){        //对象内部公有变量,不允许外部访问        var a=arg1;        var b=10;        var alertB=function(){                alert(b);        }        //外部可访问区域        return 

yangxuehui的专栏 479

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

6μA静态电流升降压DC-DC:低功耗电源设计的关键突破

在电池供电设备设计中,静态电流(Iq)是衡量电源芯片待机功耗的核心指标,直接影响TWS耳机、智能手表、物联网传感器等产品的续航表现。传统升降压DC-DC因多功率级和复杂控制,Iq往往难以压到10μA以下。而近期发布的6μA静态电流升降压方案,通过动态偏置、PFM深度轻载和按需驱动等设计,在保持升降压架构宽电压范围优势的同时,将待机损耗降至新低。这一突破不仅提升了轻载效率,也为低功耗系统的电源选型提供了更大余量,尤其适用于电池供电设备、能量采集和工业备用电源等场景。从工程实践看,合理权衡Iq与动态响应,并优化

weixin_33868027的博客 325

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

js与python哪个功能更强大,javascript与python性能对比

而 JavaScript 的主要运行环境是浏览器端和 Node.js,浏览器端支持脚本语言,而 Node.js 则可以在服务器端运行 JavaScript 代码。总之,Python 和 JavaScript 都是非常优秀的编程语言,具有各自独特的特点和应用场景。从技术角度来看,它们的区别主要在于语法风格、面向对象编程、变量类型、异步编程、运行环境和第三方库和框架等方面。Python 和 JavaScript 是两门非常流行的编程语言,它们各自有着独特的特点和应用场景。

2401_84666942的博客 807

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

以优美方式编写JavaScript代码

英文原文:CoffeeScript: The beautiful way to write JavaScript   我用 JavaScript 编程很多年了,写了大量的 JavaScript 代码,即便是我这样的经历,但我仍然还在努力地去写出更优美的 JavaScript 代码,在这篇文章中,我将探索为什么写出漂亮的 JavaScript 代码是如此困难,如何使用CoffeScript(一种简...

weixin_30767921的博客 106

js面向对象--理解闭包

由于js语言自身语法的灵活性,使得在js程序中出现了各种各样的代码风格,但也正因为如此,导致了代码的可读性和可维护性大大降低,特别随着项目的不断更新,js代码的不断增多,到后期维护时甚至连自己写的代码都不知所以然了,因此确定一种好的代码风格是很有必要的。 近两年随着ajax的兴起,js变得越来越受“重用”,js开始在web开发中中充当着非常重要的角色,因此也开始遇到了各种各样的问题。于是很多...

java技术交流 119

JavaScript函数式编程学习

<br /> <br />原文地址 http://jiarry.bokee.com/6768082.html <br /> <br /><br />对函数式编程了解较少,这些天看了一些文章,逐渐开始理解。其实以前在用的带有这种风格,只是并没有这么彻底,或者说“o,这就是函数式编程”,比如尽量限制变量的作用域到一个比较小的范围,我们再整个类里面不用到什么变量,全是通过函数来相互调用的。<br /><br />当然对于这种模式或者概念而言,其实是没有特别的定论的。不过函数式编程的确由来已久,而最近两年才开始慢慢

桥风的专栏 1855

《JavaScript语言精粹》—— 读书总结

话说这本书还是同学的推荐才读的,之前感觉这本书太薄了,不值得看,没想到小身材有大智慧,书中的内容总结的还是很到位的!所以就把最后几章,精华的部分整理整理。 优美的特性 函数是顶级对象 在JS中,没有块级作用域,都是以函数为最小的作用域,这样就可以把所有的变量放在函数的顶级声明。同时,也需要注意for循环,与java的使用方法就不一样了。即便是在for循环的体内,或者if语句中,声明的...

xingoo 178

《JavaScript核心概念及实践》——导读

**前言**大概很少有程序设计语言可以担当得起“优美”这两个字,我们可以评价一种语言语法简洁、代码可读性强(尽管这一点主要依赖于开发人员的水平,而非语言本身)、富有表达力等,但是几乎不会说哪种语言是优美的,而JavaScript则是一个例外。 程序设计语言,主要可以分为两种。一种是我们平时接触较多的,工业级的程序设计语言,如C/C++、Java、Obj...

weixin_34038293的博客 212

函数式编程

什么是纯函数?对于相同的输入,总是会得到相同的输出在执行过程中没有语义上可观察的副作用。什么是副作用?如果一个函数除了计算之外,还对它的执行上下文、执行宿主等外部环境造成了一些其它的影响,那么这些影响就是所谓的”副作用”。看几个例子🌰:下面这个add()函数不是一个纯函数,因为它违背了对于相同的输入,总是会得到相同的输出。只要在全局作用域上改变a和b的值,那么这个函数执行后就没办法得到相同的输出。简单的改造后,add对于相同的输入,总是会得到相同的输出:对于相同的a和b来说,它们的和总是相等的✅。

萌萌哒的瑞萌萌的博客 1520

编程语言全景指南:从核心概念到主流语言选择

编程语言作为人类与计算机沟通的桥梁,其核心价值在于抽象,使我们能够以更接近人类思维逻辑的方式表达计算过程。从原理上看,语言主要通过编译器或解释器将源代码转换为机器指令,其执行方式可分为编译型、解释型和混合型。在技术价值层面,不同的编程范式(如面向对象、函数式)和语言特性(如内存管理、并发模型)决定了其工程实践的适用性。应用场景广泛覆盖了系统编程、Web开发、数据科学和人工智能等领域。本文聚焦于主流编程语言如Python、Java、JavaScript、C++、Go和Rust的核心特性与选型逻辑,旨在帮助开发

weixin_33862993的博客 344

前端开发者Python速成指南:从JS思维到Pythonic代码的思维映射

动态类型语言是现代编程的基石,它允许变量类型在运行时确定,为开发带来了灵活性。然而,不同动态类型语言在类型强度上存在显著差异,这直接影响了代码的健壮性和设计哲学。Python作为一门强类型的动态语言,其核心设计原则强调代码的清晰性、一致性和优雅性,这体现在其独特的语法规则和社区推崇的“Pythonic”编码风格中。这种设计为数据处理、后端开发和自动化脚本等工程实践场景提供了坚实的基础。对于熟悉JavaScript的前端开发者而言,理解两种语言在变量声明、函数定义、异步编程和面向对象等核心概念上的映射关系,是

weixin_34409357的博客 408

编程语言简述

编程语言是通过特定的语法和规则来描述计算机应该执行的操作的一种语言。它们是人类和计算机之间的桥梁,使得人类可以用高级语言来表达和传递想法,并将这些想法转换为计算机可以理解和执行的指令。

qq_64867440的博客 305
上一篇: Ext面向对象编程
下一篇: OutputStream 转 InputStream
eclipse_spring
博客等级 码龄20年 1粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值