javaScript中如何定义类

JavaScript对象的定义以及创建对象的三种方式和遍历对象的介绍以及相对应的案例 整理的JavaScript基础知识:有对象的定义,创建对象的三种方式:字面量创建、new Object创建、构造函数创建,变量、属性、函数、方法的区别,for in 遍历对象。 阅读详情
方法源自《javaScript高级程序设计》一书
第一种方式: 工厂方法

能创建并返回特定类型的对象的工厂函数(factory function)。

function createCar(sColor)...
{
var oTempCar = new Object;
oTempCar.color = sColor;
oTempCar.showColor = function ()...
{
alert(this.color);
};
return oTempCar;
}
var oCar1 = createCar();
var oCar2 = createCar();

这是一个典型的简单工厂模式。
看一段函数定义在外部的方法:

function createCar(sColor)...{
var oTempCar = new Object;
oTempCar.color = sColor;
oTempCar.showColor = showColor;
return oTempCar;
}
function showColor()...{
alert(this.color); }

在这段代码中,在函数createCar()前定义了函数showColor().
在createCar()内部,赋予对象一个已经指向已经存在的showColor()函数的指针。从功能上来讲,这样解决了重复创建对象的问题,但该函数看起来不像对象的方法。
所有这些问题引发了开发者定义的构造函数的出现。

第二种方式:构造函数方式

你可能已经注意到第一个差别了,在构造函数内部无创建对象,而是使用this关键字。使用new运算符调用构造函数时,在执行第一行代码前先创建一个对象,只有用this才能访问该对象。然后可以直接赋予this属性,默认情况下是构造函数的返回值(不必明确使用return运算符)。
这种方式在管理函数方面与工厂方法一样都存在相同的问题。

第三种方式:原型方式

function Car()...{
}
Car.prototype.color = "blue";
var oCar1 = new Car();
var oCar2 = new Car();

调用new Car()时,原型的所有属性都被立即赋予要创建的对象,意味着所有的Car实例存放的都是指向showColor()函数的指针。从语义上看起来都属于一个对象,因此解决了前面两种方式存在的两个问题。此外使用该方法,还能用instanceof运算符检查给定变量指向的对象类型。因此,下面的代码将输出true:
alert(oCar instanceof Car); //outputs "true"
这个方式看起来很不错,遗憾的是,它并不尽如人意。
1首先这个构造函数没有参数。使用原型方式时,不能给构造函数传递参数初始化属性的值,因为car1和car2的属性都等于“red”。
2真正的问题出现在属性指向的是对象,而不是函数时。函数共享不会造成任何问题,但是对象却很少被多个实例共享的。

第四种方式:混合的构造函数/原型方式
联合使用构造函数和原型方式,就可像用其他程序设计语言一样创建对象。这种概念非常简单,即用构造函数定义对象的所有非函数属性,用原型方式定义对象的函数属性(方法)。

function Car(sColor)...{
this.color =sColor;
this.drivers =new Array("Mike","Sue");
}
Car.prototype.showColor = function()...{
alert(this.color);
}
var oCar1 =new Car("red");
var oCar2 =new Car("blue");
oCar1.drivers.push("Matt");
alert(oCar1.drivers);
//outputs "Mike,Sue,Matt"alert(oCar1.drivers);
//outputs "Mike,Sue"

第五种方式:动态原型方式(推荐)
对于习惯使用其他语言的开发者来说,使用混合的构造函数/原型方式感觉不那么和谐。批评混合的构造函数/原型方式的人认为,在构造函数内找属性,在外部找方法的做法很不合理。所以他们设计了动态原型方式,以提供更友好的编码风格。
动态原型方法的基本想法与混合的构造函数/原型方式相同,即在构造函数内定义非函数属性,而函数属性则利用原型属性定义。唯一的区别是赋予对象方法的位置。下面是使用动态原型方法重写的Car类:

function Car(sColor)...{
this.color =sColor;
this.drivers =new Array("Mike","Sue");

if(typeof Car._initialized == "undefined")...{
Car.prototype.showColor = function()...{
alert(this.color);
}
}
Car._initialized = true;
}

function Car(sColor)...{
this.color = sColor;
this.showColor = function () ...{
alert(this.color);
};
}
var oCar1 = new Car("red");
var oCar2 = new Car("blue");
Unity2018连接MySQL数据库 当前在做的一个Unity项目需要连接到MySQL数据库,弄了一整天,排了很多错,终于在Unity上成功连接到MySQL数据库了,所以分享一下,避免有这个需求的朋友不用花那么多时间。 我使用的软件是 Unity20184.0f1 + mysql-8.0.24 导入 MySql.Data.dll 首先需要把 MySql.Data.dll 导入到Assets/Plugins 这个dll需要安装Connector/NET,在安装目录\Assemblies\v4.0中拿到,最好不要下载版本太高的,版本太高导入的时候 阅读详情

相关推荐

企业老板管理者,如何监控员工的电脑屏幕?

老板监控员工电脑,需要知道员工开机后的上网行为来及时了解到员工工作情况,及时发现上班不良行为员工,及时淘汰低价值员工。 文章目录iMonitor EAM一、计算机系统日志二、具体功能介绍1.屏幕记录2.键盘记录总结 iMonitor EAM 怎么监控员工电脑,我们需要用到第三方软件,2021年最新版本软件-iMonitor EAM,软件分管理端和客户端,管理端在管理者电脑登录,客户端在员工电脑双击安装就可以,安装中不用任何设置的,客户端安装到员工电脑后也是隐藏的,不会有任何弹窗和警告信息,是无法发现和删

iMonitorSoft的博客 2179

js对象定义的3种方法

转自:微点阅读 https://www.weidianyuedu.com方法一:通过var object={} 对象字面量(1),可以叫对象直接量来自定义一个对象。对象自面量是一个表达式,这个表达式的每次运算都创建并初始化一个新对象。var user = { x:1,y:2,z:3,pp:function(){ alert("22222222") }}//用字面量定义一个对象,是以名值对的方式来保存的alert(user.y) //调用属性user.pp() //调用方法(2) var s

xiaoweids的博客 1万+

Starlink第三代终端和第二代终端的差异性有哪些?

starlink第三代终端和第二代终端的额差异

chen2jiang3的博客 2924

Js定义方法

javascript中定义方法

qq_44885775的博客 6347

Ubuntu环境下读取罗技G29方向盘信息

Ubuntu环境下读取罗技G29方向盘信息

工大机器人工作室 3461

(详细教程)opencv+pycharm+笔记本摄像头 做一个人脸识别

文章目录 前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结 一、安装opencv-python 这里推荐使用pycharm直接安装opencv-python 打开文件——设置——python解释器——点击+号 搜索opencv-python,点击安装包,等待片刻即可安装好 检查是否安装好,新建一个项目输入以下代码,若无报错则安装好 import cv2 二、准备分类器 咱们使用opencv官方提供的分类器,包括面部识别,侧...

qq_52852432的博客 1万+

Javascript中五种定义对象的方法

在javascript中,对象是拥有属性和方法的数据 本次主要讨论五种定义对象的方法 1.直接定义 创建语法: var 对象变量名 = new Object(); 对象变量名.属性1 = 属性值1; …; 对象变量名. 属性N = 属性值N; 对象变量名. 方法1 = function([参数列表]){ 方法体 } …; 对象变量名. 方法N = function([参数列表]){ 方法体 } 代码示例: var student = new Object(); student.name.

LinDadaxia的博客 1万+

OpenCV学习笔记(25)基于MFC和OpenCV的摄像机定标与立体匹配测试程序(20140505更新)

最近整理了一下这两年一直在用的摄像机定标与立体匹配测试程序,将代码进行了重构,界面也做了调整,分享出来方便有需要的朋友使用。当然我的编程能力有限,程序可能还有各种bug,请大家多多包涵。相关问题欢迎留言或email联系讨论,谢谢! ==================================================================================源码

晨宇思远 5万+

JS如何定义方法及调用

问题: 简单搜索了下,遇到点问题 1,经常在JS中看到如var foo = function(){}的形式 foo是方法名还是对象名,如果想调用此方法,是用foo(),foo.function(),还是该如何正确调用。除此之外,希望高手帮忙总结下,JS自定义方法和调用的一个大全   回答: 方法(method)是通过对象调用的javascript函数。也就是说,方法也是函数,只是比较特殊的...

AlbenXie的博客 1万+

深入剖析RK3588系统休眠唤醒机制及驱动适配秘籍

本文深入探讨了RK3588嵌入式系统的休眠唤醒机制及驱动适配技术。首先分析了系统支持的两种休眠模式(Freeze浅度睡眠和Mem深度睡眠)及四种唤醒方式(GPIO中断、蓝牙事件、外设活动和定时器唤醒)的工作原理。重点介绍了驱动适配的三个关键环节:设备树配置要点、驱动代码实现与优化方法,以及驱动与内核电源管理的协同机制。通过GPIO按键唤醒和蓝牙唤醒两个实际案例,展示了具体实现过程并提供了常见问题的解决方案。文章为开发者提供了全面的技术参考,有助于优化系统功耗管理和响应性能,对嵌入式系统开发具有重要指导意义。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 433

40、基于指令的GPU编程:OpenACC与OpenMP的深入解析

本文深入解析了两种基于指令的GPU编程模型——OpenACC和OpenMP。从编程复杂度、数据处理方式和性能表现等多个方面对两者进行了对比分析,并结合实际应用场景提供了选择建议。通过详细的代码示例和性能测试结果,帮助开发者更好地理解和应用这两种编程模型,以充分发挥GPU的并行计算能力。

q5r6s7的博客 134

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

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

weixin_36162235的博客 396

基于STM32L4XX、HAL库的ICM-42670-P姿态传感器驱动程序设计

sprintf(buffer, "温度: %.1f °C\r\n\r\n", sensor_data.temperature);sprintf(buffer, "陀螺仪: X=%.2f Y=%.2f Z=%.2f rad/s\r\n",sprintf(buffer, "加速度: X=%.2f Y=%.2f Z=%.2f m/s²\r\n",sprintf(buffer, "开始校准IMU,请保持传感器静止...\r\n");sprintf(buffer, "读取传感器数据失败\r\n");

zhusl6688的博客 640

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

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

Schaffer的博客 4517

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

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

VC中sqlite的使用

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

javascript 类的定义

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

王继军 2926

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

JS-定义类

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

dxm809的博客 4565

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

javascript中类的定义

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

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

怎样用Javascript定义一个类

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

weixin_34347651的博客 103

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

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万+

javascript如何定义类

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

有情有义有朋友 141

JS定义一个类

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

weixin_53126056的博客 4897

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

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

weixin_33595380的博客 175

js 如何定义类和引用

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

qq_44695769的博客 748

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

理解Javascript中类的定义

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

weixin_30443747的博客 100
上一篇: jsp中 java ,html/javascript 交互
下一篇: Criteria 基本查询
Devillyd
博客等级 码龄23年 58粉丝 101原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值