javascript 类的定义

使用Docker搭建MaxKB智能体平台 【代码】使用Docker搭建MaxKB智能体平台。 阅读详情

 

     1.类的定义机制  

1>用function关键字定义"类"。

2>function内部通过this指针定义"类"的成员。

3>function类似于其他语言中的构造函数(constructor)。

demo1:

function cls()
{ 
 
    this.txt = "111"; 
 
    this.display = function(){ alert("this is a test method"); } 
} 
var obj=new cls(); 
 

2.理解用new创建对象的过程

通过new cls()获得对象obj,对象obj便自动获得了属性txt和方法display。  

new 创建对象过程:  

1>当解释器遇到new操作符时便创建一个空对象;   

2>开始运行cls这个构造函数,并将其中的this指针都指向这个新建的对象;   

3>当给对象不存在的属性赋值时,解释器就会为对象创建该属性。

例如在cls中,当执行到this.txt="111"这条语句时,就会添加一个属性txt,并把字符串"111"赋给它,这样函数执行就是初始化这个对象的过程,即实现构造函数的作用;   

4>当函数执行完后,new操作符就返回初始化后的对象。  

 

3.demo1中定义“类”的缺点

在JavaScript中,function的定义实际上就是实现一个对象的构造器,是通过函数来完成的。这种方式的缺点是:   

·将所有的初始化语句、成员定义都放到一起,代码逻辑不够清晰,不易实现复杂的功能。   

·每创建一个类的实例,都要执行一次构造函数。构造函数中定义的属性和方法总被重复的创建,例如: this.display=function(){  alert("this is a test method"); }   

每创建一个cls的实例,display都会被创建一次,造成了内存的浪费。  

4.使用prototype原型对象定义类成员

使用prototype对象来定义类成员可以避免每实例化一个对象就创建一次类成员的缺点。 

当new一个function时,prototype对象的成员将自动赋给所创建的对象。

 Demo2:

是一个JavaScript对象,可以为prototype对象添加、修改、删除方法和属性。从而为一个类添加成员定义。   

<script language="JavaScript" type="text/javascript">
<!-- //定义一个只有一个属性caption的类 
function cls(){ 
 
this.caption=1; 
 
} 
 
//
使用函数的prototype属性给类定义新成员 
cls.prototype.showcaption = function(){ 
  alert(this.caption);  }  
//
创建cls的一个实例 
var obj=new cls(); 
//
调用通过prototype原型对象定义的showcaption方法 
obj.showcaption();
 //--
>
</script>   

prototype

了解了函数的prototype对象,现在再来看new的执行过程。   

1>创建一个新的对象,并让this指针指向它;   

2>将函数的prototype对象的所有成员都赋给这个新对象;   

3>执行函数体,对这个对象进行初始化操作;   

4>返回(1)中创建的对象。   

prototype对象的所有成员初始化过程发生在函数体(构造器)执行之前,所以可以在函数体内部调用prototype中定义的属性和方法。

Demo3:

<script language="JavaScript" type="text/javascript">
<!-- //定义一个只有一个属性caption的类 
function cls()...{  this.caption=1;  this.showcaption(); } 
//使用函数的prototype属性给类定义新成员 
cls.prototype.showcaption=function()...{  alert(this.caption); }
 
//创建cls的一个实例 
var obj1=new cls(); //-->
</script>  

 

 

和上一段代码相比,这里在cls的内部调用了prototype中定义的方法showcaption,从而在对象的构造过程中就弹出了对话框,显示caption属性的值为1。  

 

需要注意,原型对象的定义必须在创建类实例的语句之前,否则它将不会起作用。

Demo4:

showcaption方法,就是因为该方法的定义是在实例化一个类的语句之后。   

<script language="JavaScript" type="text/javascript">
<!-- //定义一个只有一个属性caption的类 
function cls(){ 
 
this.caption=1; 
 
this.showcaption(); 
} 
//
创建cls的一个实例 
var obj=new cls(); 
//
在创建实例的语句之后使用函数的prototype属性给类定义新成员,只会对后面创建的对象有效 
cls.prototype.showcaption=function(){ 
 alert(this.caption); } 
//--
>
</script>   

这段代码将会产生运行时错误,显示对象没有

由此可见,prototype对象专用于设计类的成员,它是和一个类紧密相关的。

除此之外,prototype还有一个重要的属性:constructor,表示对该构造函数的引用,例如:

function cls(){  
alert(1); 
} 
cls.prototype.constructor(); //
调用类的构造函数 

  

这段代码运行后将会出现对话框,在上面显示文字“1”,从而可以看出一个prototype是和一个类的定义紧密相关的。

实际上:cls.prototype.constructor===cls。  

 5.较好的自定义类的方式

前面已经介绍了如何定义一个类,如何初始化一个类的实例,且类可以在function定义的函数体中添加成员,又可以用prototype定义类的成员,编程的代码显得混乱。

如何以一种清晰的方式来定义类呢?下面给出了一种类的实现模式。   

在JavaScript中,由于对象灵活的性质,在构造函数中也可以为类添加成员,在增加灵活性的同时,也增加了代码的复杂度。

为了提高代码的可读性和开发效率,可以采用这种定义成员的方式,而使用prototype对象来替代,这样function的定义就是类的构造函数,符合传统意义类的实现:类名和构造函数名是相同的。

例如:

cls.prototype,不仅代码体积变大,而且易读性还不够。为了进一步改进,可以使用无类型对象的构造方法来指定prototype对象,从而实现类的成员定义:

function cls(){ 
 //构造函数
 } 
//
成员定义 
cls.prototype.someProperty="sample"; 
cls.prototype.someMethod=function(){ 
 //方法实现代码 }  

虽然上面的代码对于类的定义已经清晰了很多,但每定义一个属性或方法,都需要使用一次

cls,构造函数直接用类名来实现,而成员使用无类型对象来定义,以列表的方式实现了所有属性和方法,并且可以在定义的同时初始化属性的值。这也更象传统意义面向对象语言中类的实现。只是构造函数和类的成员定义被分为了两个部分,这可看成JavaScript中定义类的一种固定模式,这样在使用时会更加容易理解。   

//定义一个类cls 
function cls(){ 
 //构造函数 }
//
通过指定prototype对象来实现类的成员定义 
class1.prototype={ 
 someProperty:"sample", someMethod:function(){   //方法代码  },  
…//
其他属性和方法. 
} 
  

上面的代码用一种很清晰的方式定义了

注意:在一个类的成员之间互相引用,必须通过this指针来进行,例如在上面例子中的someMethod方法中,如果要使用属性someProperty,必须通过this.someProperty的形式,因为在JavaScript中每个属性和方法都是独立的,它们通过this指针联系在一个对象上。

 

 

手把手教你搞定6脚三位一体数码管的驱动(附C语言源码与Visual Studio调试技巧) 本文详细解析了6脚三位一体数码管的驱动原理与实战技巧,包括引脚复用、动态扫描时序、Visual Studio模拟调试及单片机实现。通过C语言源码示例和调试技巧,帮助开发者快速掌握非标准数码管的驱动方法,提升硬件开发效率。 阅读详情

相关推荐

利用 Openocd 和 FT2232H 实现 ARMv8(Coretex-A53)高效调试方案

本文详细介绍了如何利用开源工具OpenOCD与高性能USB转接芯片FT2232H,构建一套针对ARMv8架构(如Cortex-A53)的高效、低成本调试方案。内容涵盖从环境搭建、驱动配置、核心调试架构解析到实战问题排查的全过程,帮助开发者实现对多核处理器的透明、可控调试,是嵌入式Linux及底层开发的实用指南。

weixin_29163581的博客 280

Javascript中的类实现

Javascript本身并不支持面向对象,它没有访问控制符,它没有定义类的关键字class,它没有支持继承的extend或冒号,它也没有用来支持虚函数的virtual,不过,Javascript是一门灵活的语言,下面我们就看看没有关键字class的Javascript如何实现类定义,并创建对象。 一:定义类并创建类的实例对象 在Javascript中,我们用function来定义类,如下:...

amwayy的专栏 747

C#---第十一课:对列表的各种操作,添加、删除、排序、列表长度、获取元素的索引、FirstOrDefault()、SingleOrDefault()、last()

1.添加元素 2.删除元素 (1)删除列表中指定的元素 (2)删除列表A中所有与列表B相交的元素---常规 (3)删除列表A中所有与列表B相交的元素---lambda 3.排序(正序、倒序) 4.获取列表的最大容量(长度)、已用容量 6.获取元素在列表中的位置(index) 7.判断某元素是否在列表List中 8.获取列表中第一个元素First() & FirstOrDefault() 9.获取列表中唯一元素Single() & SingleOrDefault() 10.获取列表中最后一个元素

Alien-Hu 3627

Javascript定义类的三种方法

在面向对象编程中,类(class)是对象(object)的模板,定义了同一组对象(又称"实例")共有的属性和方法。这种方法比"构造函数法"简单,但是不能实现私有属性和私有方法,实例对象之间也不能共享数据,对"类"的模拟不够全面。这种方法的好处是,容易理解,结构清晰优雅,符合传统的"面向对象编程"的构造,因此可以方便地部署下面的特性。然后,在Cat的createNew()方法中,调用Animal的createNew()方法。在createNew()方法中,只要不是定义在cat对象上的方法和属性,都是私有的。

matinal 當冬夜漸暖 。公众号:matinal 4333

树莓派5首次开机保姆级教程(无显示器通过VNC连接树莓派桌面)

选择 Interface Options > VNC > Yes 启用服务。2.在Windows电脑上安装VNC软件。重启树莓派:sudo reboot。3.使用VNC远程访问树莓派桌面。

qq_34184505的博客 2351

直流电机双闭环调速系统MATLAB仿真

Chopper-Fed DC Motor Drive This example shows a Chopper-Fed DC Motor Drive. Description The DC motor is fed by the DC source through a chopper which consists of GTO thyristor and free-wheeling diode ...

飞行动力的博客 2万+

JavaScript中的类

在JavaScript中,类(Class)是一种创建对象的模板,它可以用来定义对象的属性和方法。类是一种抽象的概念,它定义了对象的行为和状态,而对象则是类的一个具体实例。

weixin_42560424的博客 1695

GD32H7实战:5步搞定YOLO轻量化模型部署到MCU(附避坑指南)

本文详细介绍了如何将YOLO轻量化模型部署到GD32H7 MCU的完整实战流程。通过五个关键步骤,涵盖环境搭建、模型训练、格式转换到工程集成,并重点分享了使用GD32AI-ModelZoo工具链进行MCU部署的避坑指南,帮助开发者在资源受限的边缘设备上实现高效目标检测。

weixin_29070861的博客 446

Ajax基础之一:JavaScript中的用户自定义类

       1.类的定义机制  1>用function关键字定义"类"。2>function内部通过this指针定义"类"的成员。3>function类似于其他语言中的构造函数(constructor)。demo1: function cls(){      this.txt = "111";      this.display = function(){ alert("

刀刀的技术专栏 4368

RK3568 Android14 调试 RTL8211F 千兆以太网 (RGMII)

调试 RTL8211F 的核心在于:确认地址(看电阻贴片情况)和 搞定延时(配置 rgmii-id 或微调 delay 值)。一旦这两点对上了,RK3568 的千兆网络就能稳定运行。希望这篇结合原理图的实战记录能帮到你!

qq_33427070的博客 1649

MATLAB 与 STK 互联导出导弹轨迹及速度数据(csv导出)

本文介绍了如何通过 MATLAB 脚本连接 STK 提取导弹三维轨迹数据,并以 CSV 格式导出,包含以下关键内容:自动连接 STK 场景;获取所有导弹对象;提取 J2000 坐标系下的位置和速度;加入任务优先级与状态;导出为标准 CSV 文件;

weixin_52370774的博客 779

javascript语言中的类(class)

类提供了一种组织代码的方式,尤其适合面向对象编程(OOP)的场景。它使代码更加模块化、可复用、可扩展。通过类,可以轻松地创建多个对象实例并管理它们的属性和行为。如何定义一个类?class 类名 {// 构造函数(定义类的属性)constructor(参数1, 参数2, ...) {this.属性1 = 参数1;this.属性2 = 参数2;// 方法(定义类的行为)方法名() {// 方法逻辑// 静态方法(直接通过类调用,无需实例化)static 静态方法名() {

ganggun的博客 2025

基于STM32的多功能旅行箱_329

随着智能硬件技术的不断发展,智能化产品逐渐渗透到日常生活的各个领域。旅行箱作为出行必需的工具,其传统功能已无法满足现代用户的需求,尤其是在安全性、便捷性和智能交互方面。为了解决这一问题,本设计基于STM32单片机开发了一款多功能智能旅行箱,集成了移动防盗报警、语音寻箱、GPS定位、称重检测、手势控制和蓝牙通信等多项功能。通过STM32F103RCT6主控芯片与HC-05蓝牙模块进行通信,结合海凌科V20语音识别模块、ATGM336H-5N GPS模块和HX711称重模块,提供了全方位的智能化体验。

484

html js定义类,JavaScript中定义类的方式详解

本文实例讲述了JavaScript中定义类的方式。分享给大家供大家参考,具体如下:Javascript本身并不支持面向对象,它没有访问控制符,它没有定义类的关键字class,它没有支持继承的extend或冒号,它也没有用来支持虚函数的virtual,不过,Javascript是一门灵活的语言,下面我们就看看没有关键字class的Javascript如何实现类定义,并创建对象。一、定义类并创建类的实...

weixin_36162235的博客 396

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

JS定义类的六种方式详解以及几种常用的JS类定义方法

在前端开发中,经常需要定义JS类。那么在JavaScript中,定义类的方式有几种,分别是什么呢?本文就JS定义类的六中方式说明如下(案例说明): 六种方式详解 1、工厂方式 function Car(){ var ocar = new Object; ocar.color = "blue"; ocar.doors = 4; ocar.showColor = function(){

Schaffer的博客 4517

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

JS-定义类

定义:function 类名称(){…} 看上去与方法语法类型,区别是类名称的首字母大写 获取对象:new 类名称(); 访问:对象.成员   <!DOCTYPE html> <html> <head>     <meta charset="utf-8" />     <title></title> &l

dxm809的博客 4565

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

javascript中类的定义

类的定义包括四种方式: //   1、工厂方式    function createCar(name,color,price){     var tempcar=new Object;     tempcar.name=name;     tempcar.color=color;     tempcar.price=price;     tempcar.getName=functio

~~~~~~常思~~~~~ 798

java script 面向对象--javascript如何定义类和对象

javascript如何定义类和对象 1、原始方式   var oCar = new Object; oCar.color = "blue"; oCar.doors = 4; oCar.mpg = 25; oCar.showColor = function() { alert(this.color); };     2、工厂方法   function ...

zcrystalspring的博客 470

怎样用Javascript定义一个类

  其实Javascript中没有类这个定义,但是有类这个概念。很多人都写过这样的代码,对,没错,就是如下代码,清晰的不能再清晰了,就是一个关键字 function,然后定义一个方法名,方法名后紧跟一对括号。如果你在项目中写过这样的代码,那么祝贺你,你可以不费任何吹毛之力,就能一口气读完这篇博文了. function Print() { …… }   当我们在写c#代码...

weixin_34347651的博客 103

JS定义一个类

在JS中定义类的方式有两种 第一种 function 类名(形式参数列表){ this.属性名=参数; this.方法名=function(){ } } 第二种 类名= function(形式参数列表){ this.属性名=参数; this.方法名=function(形式参数列表){ } } <html> <head> <meta charset="utf-8"> <ti

weixin_53126056的博客 4897

JS中定义类的方法

JS中定义类的方式有很多种: 1、工厂方式   function Car(){    var ocar = new Object;    ocar.color = "blue";    ocar.doors = 4;    ocar.showColor = function(){     document.write(this.color)    };    return ocar;   

sdlfx的专栏 4万+

php类实例化js,JavaScript类的定义和实例化

类的定义严格的说,JavaScript 是基于对象的编程语言,而不是面向对象的编程语言。在面向对象的编程语言中(如Java、C++、C#、PHP等),声明一个类使用 class 关键字。例如:public class Person{}但是在JavaScript中,没有声明类的关键字,也没有办法对类的访问权限进行控制。JavaScript 使用函数来定义类。语法:function className...

weixin_33595380的博客 175

javascript如何定义类

javascript如何定义类呢?面试的时候有学生被问到这个问题。实际上javascript的方法就是一个对象。利用这一点,我们可以使用javascript定义类。如下例子所示。...

有情有义有朋友 141

javascript中类的定义和继承

类的定义 类定义有三种基本方法, 创建并能返回特定类型的对象的函数(工厂函数),例如:function Co(){ var o = new Object; o.a = 1 return o}; 用这种方式创建对象: var o = Co() 创建构造函数,用new 实例化,例如 function Co(){this.a = 1} 用这种方式创建对象:var o = new Co() 原型方式,利用...

yring 169

js 如何定义类和引用

这个时候就要用到面向对象的想法,什么是面向对象,就是把所有的过程抽象成一个物体执行的指令举一个把鸡蛋放进冰箱的例子面向过程fill:#333;color:#333;color:#333;fill:none;拿起鸡蛋打开冰箱门把鸡蛋放进冰箱冰箱门关上面向对象:这里有三个对象,鸡蛋,我,冰箱fill:#333;color:#333;color:#333;fill:none;我.拿起(鸡蛋)冰箱.打开()冰箱.放入(鸡蛋)冰箱.关闭()

qq_44695769的博客 749

理解Javascript中类的定义

关于如何在Javascript中定义类,网上可以找到不少的文章。在开始讲之前,还是先来看看定义类的两种基本方式吧: (1) 利用函数构造类型。function Foo(text, url) { this.text = text; this.url = url; this.render = function() { document.write('<a href...

weixin_30443747的博客 100
上一篇: JWFEngine v3.3 使用说明
下一篇: HTTP协议
yourdecision
博客等级 码龄23年 2粉丝 11原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值