談JS面向對象【靜態與非靜態類】

CentOS初始服务器配置:sudo、firewalld与systemctl实战指南 Linux服务器初始化配置是保障系统安全与稳定运行的基础环节,其核心在于理解用户权限模型、网络访问控制及服务生命周期管理。sudo并非简单提权工具,而是基于setuid机制与PAM策略的细粒度权限委托协议;firewalld也不仅是端口开关,而是以zone和服务为中心的三维信任边界定义引擎;systemctl则通过依赖图协调服务启动顺序与资源调度。这些技术共同构成生产环境可交付的基线能力,广泛应用于VMware虚拟机部署、云服务器加固、Docker容器宿主初始化等典型场景。本文聚焦CentOS 7/8环境下 阅读详情

雖然我研究過C++,有點C++面向對象的思想,但是其實面向對象僅僅是一種方法而已。使用JavaScript面向對象完全出於偶然,因為大部分時間我都是在無圖形界面的環境下工作,有時候就算是介入了web客戶端的工作的時候,在寫js和ajax時,最多的也只是寫寫function,從沒有考慮過要使用JavaScript面向對像這麼高級的技巧。直到有那麼一天,我開始在js中拼湊DOM標籤,而且需要不停的拼湊,我發現我的代碼變得愈發的醜陋,不僅上是代碼簡潔的問題,甚至有時候還引發了性能問題。長此以往,不出三個月,上帝都將會不知道我寫過些什麼,本篇的目的完全出於記錄使用心得。

首先,還是來看一下促使我改變書寫JavaScript習慣的垃圾代碼,在練習、測試、調試、甚至正式項目中,大量的充斥著下面的代碼。


三個函數
Function finduser(userId){….}Function showmessage(msg){….Var message=”提示,出錯了,錯誤原因”+msg;Alert(message);}Function append(obj){Var onclick=”createdom( )”;Var title=”你好”;$(obj).append(“<a href='javascript:void(0)' onclick='”+onclick+”' title='”+title+”'>”+ title+”</a>”);….}


不要告訴我你沒有見過上面的代碼,說實話,上面的代碼確實寫得快,調用簡單,如果前兩個函數還不足以引發你的憤慨,那麼第三個函數應該讓你有點想問候寫這代碼創建者的衝動了。是的,第三個函數直接觸發了我決定使用面向對象。

實際上,我完全可以把第三個函數改造成下面這樣。


function append(obj){var a=document.craeteElement(“a”);a.title=”你好”;a.href=”javascript:void(0);”;a.innerHTML=a.title;a .click=function(){createdom();};$(obj).append(a);….}


這樣如何?有進步吧,好,這就是我想要的代碼,但是還不夠簡潔。我希望可以把創建DOM對象封裝到一個類中,並且把以上的三個方法都裝到一個對像中;那好吧,動手起來是很簡單的事情,這種工作不需要上網搜索代碼和示例的,直接應用C#的面向對象思維就可以完成。

首先是封裝以上的三個方法到一個對像中,封裝很簡單,應該不用我多廢話的,直接上代碼。

 

封裝後的三個函數
User={Function finduser(userId){….},Function showmessage(msg){….Var message=”提示,出錯了,錯誤原因”+msg;Alert(message);},Function append(obj){Var a=document.craeteElement(“a”);a.title=”你好”;a.href=”javascript:void(0);”;a.innerHTML=a.title;a.click=function(){ createdom();};$(obj).append(a);….}}


只需要聲明一個User變量來存儲上面的三個方法即可,不同的方法間使用逗號分隔,需要注意的是,這時候的User是一個靜態的類,無構造函數或者構造函數私有(我猜的),反正不可new了。

其次,我再創建一個封裝創建DOM對象的靜態類,代碼如下:


createElement={ element=function(targetName){return document.createElement(targetName);},a=document. createElement(“a”) }


相當簡單,這樣我就可以測試一下上面的CreateElement對像是否可正常工作,這次測試是在append方法中進行測試。 append方法再次被改造成下面的代碼。


function append(obj){Var a= createElement .a;a.title=”你好”;a.href=”javascript:void(0);”;a.innerHTML=a.title;a.click=function( ){createdom();};$(obj).append(a);….}


目前看來,append工作得相當的良好,好吧,我需要作出一點小改動,我需要在append函數中創建三個a並把它依次添加到obj對像中,代碼如下:


代碼
function append(obj){For(i=0;i<3;i++){Var a= createElement .a;a.title=”你好”;a.href=”javascript:void(0);”;a .innerHTML=a.title;a.click=function(){createdom();};$(obj).append(a);….}}


最後顯示的結果是obj對像中只得到了一個a我十分的不理解,這一個a讓我覺得我又回到了C#的懷抱,多麼美好呀,經過分析,當我通過Var a= CreateElement .a;

第一次調用在CreateElement.a來獲取a對象時,a屬性中的document.createElement(“a”)就已經把a對象駐留到內存中,這之後不管我再怎麼調用CreateElement.a,實際上都只是得到了內存中a的一個引用,改變的都竟然是同一個對象,這就是靜態類的特別之處,但是,當我通過調用CreateElement.element函數來獲取對象時,每次我得到的都是一個新的對象,方法不會保存對象的引用,這是肯定的,解決方法就是通過調用CreateElement.element函數來創建新的對象,但是這種方法非面向對象推薦。

另外一種比較好的解決辦法是使用非靜態類,即實體類的方式,創建非靜態類的方式也是相當的簡單,代碼如下:


createElement=function(){ element=function(targetName){return document.createElement(targetName);};a=document. createElement(“a”);}
直接聲明createElement對象,並使之有構造函數,成員間以分號進行分隔,當然如果你喜歡,還可以直接這樣寫,也是沒有一樣的效果。


function createElement (){ element=function(targetName){return document.createElement(targetName);};a=document. createElement(“a”);}


經過上面的聲明,我們就可以在append函數中像C#一樣使用createElement類來創建DOM對象了。


函數
function append(obj){for(i=0;i<3;i++){var ele=new createElement();var a=ele.a;a.title=”你好”;a.href=”javascript: void(0);”;a.innerHTML=a.title;a.click=function(){createdom();};$(obj).append(a);….}}


這樣每次new createElement()都是一個新的對象,不存在引用的問題了。

實際上,上面提到的就是Javascript中靜態類和非靜態類的區別;當然也從中得知,使用靜態類非靜態類的效率上還是有些差別的,而且調用的時候肯定也是靜態類方便一些,如果不計較引用衝突問題,我覺得靜態類應該是首選的。

作者:飛鴿傳書(http://www.freeeim.com/ipmsg/)

面向对象编程中的静态与非静态类及其在 JavaScript 中的应用 非静态类是最常见的类类型,它包含了实例方法和属性,这些方法和属性需要通过类的实例来访问。静态类是一种特殊类型的类,它主要用于提供一组相关的静态方法和属性,这些方法和属性可以直接通过类本身来访问,而无需实例化类。静态类提供了一组相关的静态方法和属性,可以直接通过类名来访问,而非静态类包含实例方法和属性,需要通过类的实例来访问。非静态类允许我们创建多个对象实例,并通过这些实例来访问类中定义的方法和属性。静态类适用于不需要创建对象实例的常用操作,而非静态类适用于表示具体的对象或实体,并且允许创建多个对象实例。 阅读详情

相关推荐

TypeScript(TS):静态类型的编程语言

TypeScript是一种静态类型的编程语言,它通过添加静态类型注解和额外的语言特性,为JavaScript开发人员提供了更好的开发体验和工具支持。它具有静态类型检查、增强的工具支持、ES6+特性支持、面向对象编程等特点。通过使用TypeScript,开发人员可以在编码阶段就捕获潜在的类型错误,并编写更高质量、可维护的代码。

2301_79331328的博客 693

js中document节点获取页面元素的六种方式

1.querySelector()方法 描述:本方法用于根据给定的选择器选中页面元素 如果有多个元素满足条件,则返回第一个满足条件的元素节点 语法:document.querySelector('选择器名'); 注意:如果查找失败,返回null 2.querySelectAll()方法 描述:本方法用于根据给定的选择器选中页面元素 如果有多个元素满足条件,则返回这些元素构成的集合 语法:document.querySelectAll('选择器名')...

不甜呐的博客 1万+

编程语言发展史之:静态类型与动态类型

作者:禅与计算机程序设计艺术 1.简介 静态类型和动态类型是一种程序设计语言的重要特征。在编译期间,编译器对变量进行类型检查,确保它们的值符合类型定义;而运行时环境则不进行这一检查,并让变量的类型随着程序的执行而变化。 本文主要分析静态类型、动态类型及其影响因素,并阐述为什么动态类型更适合作为程序开发的

AI天才研究院 2352

C# static的用法详解

目录 一、静态类 1、静态类的主要特性: 2、静态类与私有构造函数区别: 二、静态成员 三、静态方法 四、静态构造函数 五、静态成员的存储 5.1 静态全局变量 定义: 特点: 5.2 静态局部变量 定义: 特点: 5.3 静态数据成员  内存分配: 初始化和定义: 特点: 访问形式: 作用: 5.4 静态成员函数 特点: 作用: 调用形式: 注意: static静态的,不变的,在某个类中只有一个,不会因实例化对象的不同而不同。 static可以修饰...

W_H_M_2018的博客 1万+

【华为鸿蒙3.0/荣耀安卓12使用VMOS Pro的激活方式】

解压激活工具 →连接数据线 轻松搞定激活!

Amy_mumu的博客 142万+

【AAOS】【源码分析】用户管理(五)-- MUMD介绍

MUMD(多用户多屏显示)是Android Automotive OS为车载多乘员场景设计的功能,支持不同座位用户独立操作各自屏幕。

码农的历程 1510

认识Javascript中的Document对象以及如何用三种方法访问元素对象

Document对象是客户端javascript中最常用的对象。 主要的方法: close():关闭由open()方法打开的文档 open():产生一个新文档,覆盖已有文档 write():把文本写入当前打开的文档中 writeln():把文本写入当前打开的文档中,并附加一个换行符 主要的属性: alinkColor,linkColor,vlinkColor:分别代指被激活的

你为什么不努力的专栏 3155

win x64下安装oracle 12c出现[INS-30131]报错的解决方案

问题:  win x64下安装oracle 12c出现[INS-30131]报错的解决方案 安装oracle11g碰到“无法访问临时位置”的问题,详细信息如下: INS-30131] 执行安装程序验证所需的初始设置失败。 原因 - 无法访问临时位置。   操作 - 请确保当前用户具有访问临时位置所需的权限。   附加信息:  - 所有节点上的框架设置检查都失败  

一条道走到黑的GISer 1347

document对象获取HTML元素的三种常见方法

document常用获取HTML元素对象的常见方法有 1.根据元素的ID获取 document.getElementById(‘元素的ID’) 2.根据元素的类名获取 document.getElementsByClassName() 3.根据元素的标签名获取 document.getElementsByTagName(‘元素的标签名’) ...

weixin_45936680的博客 4434

ADS1299寄存器配置与应用实战指南

本文提供了ADS1299高精度生物电信号采集芯片的寄存器配置与应用实战指南。详细解析了采样率、增益、转换模式等核心寄存器的设置方法,并分享了数据读取、高级功能配置及常见问题的调试心得,帮助开发者快速掌握ADS1299的配置技巧,实现稳定的ECG/EEG信号采集。

weixin_28278377的博客 194

Enterprise Architect 中文经典教程

本文使用到的EA工程文件下载 一、Enterprise Architect简介 Enterprise Architect是一个对于软件系统开发有着极好支持的CASE软件(Computer Aided Software Engineering)。EA不同于普通的UML画图工具(如VISIO),它将支撑系统开发的全过程。在需求分析阶段,系统分析与设计阶段,系统开发及部署等方面有着强大的支持,...

2万+

js 共有方法,私有方法,特权方法,静态属性和方法,静态类

Javascript 面向对象(共有方法,私有方法,特权方法,静态属性和方法,静态类)示例讲解 一,私有属性和方法 https://www.cnblogs.com/xiongzaiqiren/p/6733985.html 私有方法:私有方法本身是可以访问类内部的所有属性(即私有属性和公有属性),但是私有方法是不可以在类的外部被调用。 1 <script> 2 ...

qq_40774743的博客 715

LangChain Agent Skills 实战指南:12个案例玩转智能体技能封装与编排

大语言模型应用开发中,智能体(Agent)的能力扩展正从零散的函数调用走向标准化封装。Agent Skills 将某项具体能力组织为带说明、代码与依赖的技能目录,让模型能自动发现和调度,其核心价值在于解决工具数量膨胀后的维护混乱与调用失控问题。与 Tool 的单一执行、MCP 的协议连接不同,Skill 更强调能力的语义描述与组合复用,配合 LangGraph 的状态编排和 LangSmith 的可观测性,可构建生产级智能体系统。在实际场景中,Agent Skills 可覆盖 RAG 知识库问答、多轮记忆保

weixin_34335458的博客 407

TypeScript和JavaScript的区别

code函数要执行的代码;}其中function为声明函数的关键字,function_name为自定义函数的名字,arg为参数列表,_returntype为该函数的返回值类型,code为函数被调用时要执行的代码,使用return关键字返回数据,data为要返回的数据,要使用“{}”括起来。number)number{//定义返回值为number类型的函数returnx+y;//调用函数匿名函数number){//定义匿名函数returnx+y;};......

资深全栈开发工程师 7万+

2023-2024深度学习框架之争——选pytorch还是tensorflow?

深度学习是人工智能领域的一个重要分支,它利用多层神经网络来模拟人类的学习和推理能力,解决各种复杂的问题,如图像识别、自然语言处理、语音识别、推荐系统等。深度学习框架是一种软件工具,它提供了构建、训练、测试和部署深度学习模型的便利,使得开发者和研究者可以更高效地进行深度学习的开发和应用。目前,市场上有许多不同的深度学习框架,如PyTorch、TensorFlow、Keras、MXNet、Caffe2等,它们各有优劣,适用于不同的场景和需求。

flchen_nchu的博客 6753

MuJoCo 入门教程(四)建模

在 MJCF 中,一个体可以包含多个关节,因此无需引入虚拟体来创建复合关节。相反,只需在同一主体中定义构成所需复合关节的所有原始关节即可。例如,可以使用两个滑块和一个铰链来模拟在平面内运动的肢体。其他 MJCF 元素可以在嵌套的主体元素所创建的树中定义,特别是关节、几何体、场地、摄像机、灯光。当一个元素被定义在一个肢体内时,它就固定在该肢体的局部坐标系上,并始终随其移动。涉及多个机构或根本不涉及机构的元素,将在运动树之外的单独部分中定义。

机器人控制与仿真应用 4162

在VSCode中为Vue.js开发启用静态类型检查Flow

众所周知,Javascript是一种弱类型(或者称为动态类型)语言,即变量的类型是不确定的。例如,下面代码中的temp一开始是字符串,后来又变成了数字:12temp = 'hello';temp = 5; 弱类型语言变量类型完全由当时的值决定,所以称为“弱类型”。这样设计有其好处,可以写出非常简洁的代码。但是在构建大型项目的时候,无法在编译期发现问题会导致很难发现问题,反而会为程...

JohnnieZhu的博客 1975

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

JavaScript静态类写法

转自:http://www.rainleaves.com/html/1684.html

chelen_jak的专栏 1081

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

js面向对象 + 模块化编程

如题所示,又面向对象又模块化,死未? 模块化已经总结过,主要解决js之间的依赖问题,方便引用。特别适合动态加载JS的场景。 js应用模块化 那么面向对象呢?众所周知,js没有类,只有函数。但可以用函数来模拟类和对象。 面向对象语言中,类可分为普通类和静态类。普通类要使用的话,要new出一个个对象;静态类则可以直接通过类名来直接使用类里的公共方法。静态类适合类库这种形式。 js里面,也可以分普通类和静态类两种方式进行面向对象编程: 普通类 //普通类 //定义 function ClassD(p1,p2){

左直拳的马桶_日用桶 656

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

TypeScript(一)TypeScript 的特性(静态类型、弱类型)、编译时报错、安装

TypeScript(一)TypeScript 的特性(静态类型、弱类型)、编译时报错、安装 文章目录TypeScript(一)TypeScript 的特性(静态类型、弱类型)、编译时报错、安装1. 什么是 TypeScriptTypeScript 的特性类型系统TypeScript 是静态类型TypeScript 是弱类型适用于任何规模与标准同步发展总结2. 安装 TypeScript编辑器3. Hello TypeScript 网址:https://ts.xcatliu.com/ 1. 什么是

qq_43456781的博客 3892

静态类型 强类型_如何采用静态类型

静态类型 强类型重点(Top highlight)静态打字并不适合所有人!(Static Typing is not for everyone!) “Getting organized is a sign of self-respect.” — Gabby Bernstein “组织起来是自尊的标志。” —加比·伯恩斯坦(Gabby Bernstein) The whole idea of pro...

weixin_26735419的博客 272

Javascript 类与静态类的实现-js面向对象

在Javascript里,对面向对象并没有一个直接的实现,对于代码方面也是非常的灵活。 今天所要说的就是,如何在Javascript里写类与静态类,这是本人一惯用的方法,你也可以有更为方便的,也可以发发评论跟大家交流交流。 首先说说类,在一个类里我们会有以下的几个特征: 1. 公有方法 2. 私有方法 3. 属性 4. 私有变量 5. 析构函数 我们直接看一个例子: 类例子 代码如下: ...

weixin_34311757的博客 82

Javascript 类与静态类的实现

在Javascript里,对面向对象并没有一个直接的实现,对于代码方面也是非常的灵活。今天所要说的就是,如何在Javascript里写类与静态类,这是本人一惯用的方法,你也可以有更为方便的,也可以发发评论跟大家交流交流。 首先说说类,在一个类里我们会有以下的几个特征: 1. 公有方法 2. 私有方法 3. 属性 4. 私有变量 5. 析构函数 我们直接看一个例子: 类例子 ...

weixin_30699463的博客 107

有了JavaScript,为啥还要TypeScript?不清不楚太糊弄人了,两者之间的组件形式差异_javascript有面向对象为什么还会出现typescript

TypeScript 是一种由微软开发的开源、静态类型化的编程语言,它是 JavaScript 的超集,也就是说,所有的 JavaScript 代码都是合法的 TypeScript 代码。然而,TypeScript 在 JavaScript 的基础上引入了许多新的特性和改进,主要目的是提高大型和复杂项目的可维护性和可扩展性。TypeScript: 中文网 官网 官方.静态类型系统: TypeScript 最显著的特性是它的静态类型系统。

2401_84620231的博客 1333

用JAVASCRIPT实现静态对象、静态方法和静态属性

Javascript语言的面向对象特征很弱,其他面向对象语言在创建类时只要使用关键字static即可指定类为静态类,Javascript没有提供static这样的关键字,要让Javascript也具有“静态”特性只有靠一些“奇技淫巧”了。 代码中列举了两种静态方法/属性的实现方式,一种是静态类的静态方法和属性,另一种是非静态类的静态方法和属性,代码说明都写在每行的代码注释里,这里就不重复了。...

weixin_33937778的博客 1118

【TS】TypeScript 入门指南:强大的JavaScript超集

TypeScript是一种开源编程语言,它在JavaScript的基础上添加了静态类型定义,支持类、接口、模块等面向对象编程特性。TypeScript代码最终会被编译成纯JavaScript代码,这意味着任何能够运行JavaScript的环境都能运行TypeScript程序。因此,TypeScript不仅继承了JavaScript的所有优点,还解决了JavaScript的一些痛点问题,如类型安全、开发工具的智能提示等。

鑫宝的博客 3617
上一篇: 韩寒近期【雷人】语录
下一篇: 如何自定义MFC的窗口类名
普通网友
博客等级 码龄22年 1万+粉丝 3156原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值