JavaScript面向对象

js面向对象的基本概念和使用方法 1、什么是面向对象?     OO(Object Oriented,面向对象)是当前计算机界关心的重点,它是90年代软件开发方法的主流。面向对象的概念和应用已超越了程序设计和软件开发,扩展到很宽的范围。如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。     OO方法(Object-Oriented Method,面向对象方法) 面向对象的方 阅读详情

  

    面向对象目标

我假设读者对JavaScript有基本的了解,包括事件回调,并且了解面向对象编程。

我认为面向对象编程的三个主要的目标是:

²  封装         提供一个方法,去调用JavaScript对象里边的成员

²  多态         两个类响应同样一个方法

²  继承         定义一个类的子类

 

通过以下例子,我将演示如下技术:

*  定义一个类

*  定义类里边的回调方法

*  定义一个子类

*  从子类调用基类的构造函数

*  在子类中重写基类的方法

*  在子类中调用基类的方法

 

简单对象

在JavaScript中,最简单的对象就是构建一个Object的数据类型。在JavaScript中,可以把一组命名后的属性集合放在一块儿执行。作为一种解释型语言,JavaScript允许你在任何地方任何时间去创建属性。

下面,我们举一个例子,首先创建一个对象,然后添加多个属性给这个对象:

obj = new Object;
obj.x = 1;
obj.y = 2;

我用如下的图形表示JavaScript对象:

obj

x

1

y

2

Object.prototype

constructor

Object

其中,左列显示的是对象的每个可用的属性,右列显示的值。在这个里边,其实我们定义了一个JavaScript内置的构造函数,包含两个属性。在后边,我会解释prototype这个属性的。

 

定义一个类

一个方法可以很容易定义出一个JavaScript类。下面的代码片段定义了一个类 foo,然后,创建了这个类的对象。

function Foo()
{
    this.x = 1;
    this.y = 2;
}
 
obj = new Foo;

obj

x

1

y

2

Foo.prototype

constructor

Foo

Object.prototype

(constructor)

Object

只要你愿意,你可以创建很多个Foo类型的对象,它们分别会初始化各自的属性,将x 与 y赋值为1和2.

 

解释prototypes

在JavaScript中,每一个对象都可以从其它的对象进行继承,我们称之为prototype。当执行到某属性时,JavaScript会首先直接从该对象中寻找是否具有,如果没有,那么就在对象的object prototype中寻找该属性,像一条锁链一样,一直追溯到根原型(root prototype).

 

例如,我们希望创建一个对象object,X来自于方法B,B的原型是B.prototype, A.prototype, Object.prototype:

 

我们可以用下面的代码表示:

Object.prototype.inObj = 1;
 
function A()
{
    this.inA = 2;
}
 
A.prototype.inAProto = 3;
 
B.prototype = new A;            // Hook up A into B's prototype chain
B.prototype.constructor = B;
function B()
{
    this.inB = 4;
}
 
B.prototype.inBProto = 5;
 
x = new B;
document.write(x.inObj + ', ' + x.inA + ', ' + x.inAProto + ', ' + x.inB + ', ' + x.inBProto);

1, 2, 3, 4, 5

x

inB

4

B.prototype

constructor

B

inA

2

inBProto

5

A.prototype

(constructor)

A

inAProto

3

Object.prototype

(constructor)

Object

inObj

1

 

定义并且调用类的方法

function Foo()
{
    this.x = 1;
}
 
Foo.prototype.AddX = function(y)    // Define Method
{
    this.x += y;
}
 
obj = new Foo;
 
obj.AddX(5);                        // Call Method

 

obj

x

6

Foo.prototype

constructor

Foo

AddX

function ...

Object.prototype

(constructor)

Object

 

 

多态

function A()
{
    this.x = 1;
}
 
A.prototype.DoIt = function()    // Define Method
{
    this.x += 1;
}
 
function B()
{
    this.x = 1;
}
 
B.prototype.DoIt = function()    // Define Method
{
    this.x += 2;
}
 
a = new A;
b = new B;
 
a.DoIt();
b.DoIt();
document.write(a.x + ', ' + b.x);

2, 3

a

x

2

A.prototype

constructor

A

DoIt

function ...

Object.prototype

(constructor)

Object

 

b

x

3

B.prototype

constructor

B

DoIt

function ...

Object.prototype

(constructor)

Object

 

定义一个子类

 

function A()                        // Define super class
{
    this.x = 1;
}
 
A.prototype.DoIt = function()        // Define Method
{
    this.x += 1;
}
 
B.prototype = new A;                // Define sub-class
B.prototype.constructor = B;
function B()
{
    A.call(this);                    // Call super-class constructor (if desired)
    this.y = 2;
}
 
B.prototype.DoIt = function()        // Define Method
{
    A.prototype.DoIt.call(this);    // Call super-class method (if desired)
    this.y += 1;
}
 
b = new B;
 
document.write((b instanceof A) + ', ' + (b instanceof B) + '
');
b.DoIt();
document.write(b.x + ', ' + b.y);

 

true, true
2, 3

b

x

2

y

3

B.prototype

constructor

B

(x)

1

DoIt

function ...

A.prototype

(constructor)

A

(DoIt)

function ...

Object.prototype

(constructor)

Object

 

An Alternate Sub-Classing Paradigm

Function.prototype.DeriveFrom = function(fnSuper)
{
    var prop
    if (this == fnSuper)
        {
        alert("Error - cannot derive from self");
        return;
        }
    for (prop in fnSuper.prototype)
        {
        if (typeof(fnSuper.prototype[prop]) == "function" && !this.prototype[prop])
            {
            this.prototype[prop] = fnSuper.prototype[prop];
            }
        }

    this.prototype[fnSuper.StName()] = fnSuper;
}

Function.prototype.StName = function()
{
    var st;
    st = this.toString();
    st = st.substring(st.indexOf(" ")+1, st.indexOf("("));
    if (st.charAt(0) == "(")
        st = "function ...";
    return st;
}

Function.prototype.Override = function(fnSuper, stMethod)
{
    this.prototype[fnSuper.StName() + "_" + stMethod] = fnSuper.prototype[stMethod];
}

Repeating the sub-classing example using this new paradigm:

function A()                        // Define super class
{
    this.x = 1;
}
 
A.prototype.DoIt = function()        // Define Method
{
    this.x += 1;
}
 
B.DeriveFrom(A);                    // Define sub-class
function B()
{
    this.A();                        // Call super-class constructor (if desired)
    this.y = 2;
}
 
B.Override(A, 'DoIt');
B.prototype.DoIt = function()        // Define Method
{
    this.A_DoIt();                    // Call super-class method (if desired)
    this.y += 1;
}
 
b = new B;
 
document.write((b instanceof A) + ', ' + (b instanceof B) + '
');
b.DoIt();
document.write(b.x + ', ' + b.y);

 

false, true
2, 3

b

x

2

y

3

B.prototype

constructor

B

DoIt

function ...

A

A

A_DoIt

function ...

Object.prototype

(constructor)

Object

 

私有成员

令人吃惊的是,JavaScript支持对象的私有成员。

function A()
{
    var x = 7;
 
    this.GetX = function() { return x;}
    this.SetX = function(xT) { x = xT; }
}
 
obj = new A;
obj2 = new A;
document.write(obj.GetX() + ' ' + obj2.GetX());
obj.SetX(14);
document.write(' ' + obj.GetX() + ' ' + obj2.GetX());

7 7 14 7

obj

GetX

function ...

SetX

function ...

A.prototype

constructor

A

Object.prototype

(constructor)

Object

 

obj2

GetX

function ...

SetX

function ...

A.prototype

constructor

A

Object.prototype

(constructor)

Object

 

 

Trackback: http://mckoss.com/jscript/object.htm

 

 

JavaScript面向对象编程(1)-- 基础

http://www.cnblogs.com/johnson2008/archive/2008/05/15/1198252.html

 

JavaScript面向对象编程(2)-- 类的定义

http://www.cnblogs.com/johnson2008/archive/2008/05/29/1209781.html

【ROS机器人系统】自主导航+YOLO目标检测+语音播报 完成自主导航功能,并在小车移动至指定地点的过程中,通过机器人的摄像头检测导航途中所见物体,识别出物体的种类(框选出不同物体并标注识别结果),结合科大讯飞语音合成模块对识别结果进行语音播报。.............................. 阅读详情

相关推荐

思澈sdk-新建lcd

co5300至此有3个同ID的驱动,在co5300xxxx.c的LCD_DRIVER_EXPORT(co5300, LCD_ID, &lcdc_int_cfg, &CO5300_drv, LCD_PIXEL_WIDTH, LCD_PIXEL_HEIGHT, 2);2 在customer\peripherals\Kconfig_lcd中添加如下配置(注意修改的地方有两个LCD_USING_TFT_CO5300_143)5 在该文件中的config LCD_DPI配置项下添加:(这里300为DPI)

gongyuan073的专栏 1384

【JS高级进阶】JavaScript初识面向对象

本篇主要讲解了什么是面向对象,如何创建使用类,super关键字的使用以及注意事项(学过Java的小伙伴们就会很容易理解)区分面向对象和面向过程

zhaochen1127的博客 2700

用Python爬取公众号历史所有文章,看这篇就够了

手把手教你爬取公众号历史所有文章

u010522887的专栏 1万+

node.js 之javascript 面向对象

做完一段时间的嵌入式开发,又回到web开发了,陌生的感觉一点点。。。 之前看过不少node.js的热评,凑个热闹记住这个名字后后也没太在意,最近的项目中用到了一个新的java框架,其中种种魔术式的约定让人没有安全感,于是有了想深入探索的冲动。框架的资料说明不多,时间也不是很充裕,忍了一年多后还是跳进了源代码中。。。大概了解了流程,在神秘感没有后,于是又有了想玩转框架的冲动,世界框架万千种

rangq1的专栏 1704

C# 上位机开发完全指南:从零开始构建工业控制系统

摘要: 本文详细介绍了使用C#开发工业自动化上位机系统的关键技术和方法。上位机作为工业控制的核心枢纽,负责与PLC、传感器等设备通信,实现数据采集、监控和控制。开发基于C#的上位机需掌握Windows Forms/WPF界面设计、Modbus/OPC等通信协议,以及SQL数据库存储。文章分步讲解了环境搭建、界面设计、设备通信(以Modbus和TCP/IP为例)、数据存储与展示等关键环节,并强调多线程优化与异常处理的重要性。通过C#和.NET技术栈,开发者能够构建高效稳定的工业控制系统,未来可扩展至云平台和物

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1014

Look4sat蓝牙追星云台

//这是一个追星云台的小程序 //配合Look4sat蓝牙传输数据(W*** A***),并让电机做出动作 //app设置内填好ESP32的蓝牙MAC,数据格式:W$AZ A$EL //希望大家可以共同改进

HoyAnGx的博客 616

JavaScript之全面理解面向对象的JS

今天看到一篇文章写得很好,对于像博主这种js一般级别的菜鸟很有帮助,博主秉着“好文要转”的原则收藏了这篇文章,简单排了下版,分享给大家,本文转自原文:http://www.ibm.com/developerworks/cn/web/1304_zengyz_jsoo/#listing1,版权归原作者所有。 前言         当今 JavaScript 大行其道,各种应用对其依赖日深

代码与酒 4440

Openclaw第3章:进阶部署

本章面向需要在特定环境中稳定运行 OpenClaw 的用户,介绍 Windows、Linux、Docker 以及 Cloudflare Workers 四种进阶部署方式。每种方式各有侧重:Windows 部署适合桌面用户日常使用,Linux 部署适合开发者,Docker 部署适合追求环境隔离的运维场景,Cloudflare Workers 部署则适合希望获得全球边缘网络加速的用户。读者可根据自身环境和需求选择合适的方案,完成本章后可继续阅读第4章了解维护升级流程。

Maynor的博客 1295

前端js入门——JavaScript 面向对象

JavaScript是一门面向对象的语言,与其他面向对象语言相比具有自己的特点。 下面将从总体上对其做一下概述,不会对细节做过多介绍。 本文将解决如下几个问题: (1).什么是面向对象。 (2).对象成员有哪些。 (3).JavaScript实现面向对象。 一.什么是面向对象: 经常说面向对象的编程,但是刚开始可能并不明白面向对象具体含义是什么。 通俗的讲,就是将程序中的成员看做一个对象,此对象是...

fenghulun的博客 2003

【WRF工具】WRF Domain Wizard第一期:软件下载及安装

【WRF工具介绍】WRF Domain Wizard-确定模拟区域

WW、forever的博客 2918

【用unity实现100个游戏之15】开发一个类保卫萝卜的Unity2D塔防游戏5(附项目源码,完结)

本期是本项目的最后一篇,主要内容是配置环境、生成不同敌人、结束重开。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 2571

JS(四)--JavaScript 面向对象编程

JavaScript 面向对象编程一、JavaScript 面向对象编程1.1.、什么是面向对象编程1.2、面向过程和面向对象的对比1.3、JavaScript 中的对象?1.3.1、属性和方法是什么?二、面向对象编程案例三、JS面向对象的特征3.1、**封装性**3.2、**继承性** 一、JavaScript 面向对象编程 1.1.、什么是面向对象编程 面向对象是一种解决问题的思路,一种编程思...

-_^汪洸*的博客 711

单线激光雷达的工作原理

单线激光雷达通过单一激光束的水平扫描和时间 / 相位测量,实现二维环境的距离感知,是低成本二维导航的核心传感器。尽管其无法直接提供三维信息,但其可靠性和经济性使其在消费级和工业级场景中广泛应用。随着技术发展,部分单线雷达通过振动镜或 MEMS 微振镜实现微小角度偏转,可近似模拟多线扫描效果,进一步拓展了应用边界。

谢谢大家的关注和点赞!这里只有纯纯的知识干货,没有一句废话。希望能实实在在帮到大家~要是觉得有用,别忘了给我点支持哟,你 1859

JS(JavaScript)中的面向对象编程——详细总结(附源码)

文章目录一,什么是面向对象二,JS面向对象的几种特征以及类和对象1,面向对象的几种特征2,面向对象中的类和对象三,JS中默认存在的类(常见的)1,Number类2,String类3,Boolean构造器(JS中构造器也叫类)4,Object构造器(存在语法糖)5,Data类6,Math类(不需要new)7,Array类四,JS中的对象1,证明:JS中的一切数据都是对象2,对象是属性的无序集合3,对象属性的增删改查(1)对象属性的遍历(for in)(2)对象属性的增删改4,对象中属性的四大特征(1)conf

qq_44830054的博客 1349

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

{js}JavaScript中支持面向对象的基础

今天在研究dwr2.0的时候,突然看到了demo中javascript用{}创建对象的方法,很好奇,感觉非常像java中的map对象,而事实这是javascript中的Object对象而以,其中的key只是它的属性或者方法,value是它属性对应的值或者方法对应的实现而已,对此特别在网上找到了以下的文章,让我更多的认识了javascript的使用,且更加感兴趣了================

天涯 书塾 1061

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

JavaScript高级:js中面向对象编程

JavaScript高级:js中面向对象编程:1 引言;2 封装性;3 原型;4 数组扩展案例--> 求和 和 最大值;5 原型对象中的constructor属性;6 对象原型;7 对象原型中的constructor属性;8 上述总结;9 原型继承;10 原型链

xiaoxie_life_study 1357

廖雪峰Python教程[完整版]

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

JavaScript高级(1)——js面向对象

js面向对象 学习目标: 能够说出什么是面向对象 能够说出类和对象的关系 能够使用class创建自定义类 能够说出什么是继承 js面向对象编程介绍 面向对象编程介绍 两大编程思想 面向过程和面向对象 面向过程编程POP(Process-oriented programming) 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候再一个一个的依次调用就可以了。 举个例子 面向过程:就是按照我们分析好的步骤,按照步骤解决问题 面向对象编程OOP(Object-orient

curacaolb的博客 1178

Js是基于对象还是面向对象的

Js是基于对象还是面向对象的一、什么叫做面向对象二、什么叫做基于对象三: Js的特性四:js通过原型链等来模拟出和面向对象很类似的功能。五:总结 一、什么叫做面向对象 面向对象的三大特点(封装,继承,多态)缺一不可。 所谓封装:也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。封装是面向对象的特征之一,是对象和类概念的主要特性。 简单...

qq_42615057的博客 1777

JS之JavaScript中的面向对象及DOM操作

面向对象 DOM

qq_41547728的博客 487

js对象添加属性_是时候让JavaScript面向对象了

基础篇学好JS的面向对象,能很大程度上提高代码的重用率,像jQuery,easyui等,这篇文章主要从细节上一步步讲JS中如何有效地创建对象,也可以看到常见的创建对象的方式,最后也会附上一些JS面向对象的案例。一、面向对象1.对象:对象是一个整体,对外提供一些操作。2.面向对象:使用对象时,只关注对象提供的功能,不关注其内部细节。比如电脑——有鼠标、键盘,我们只需要知道怎么使用鼠标,敲打键盘即可,...

weixin_39834149的博客 397

面向对象的JavaScript编程

面向对象的JavaScript编程 Javascript对于做过Web程序的人不应该是陌生,初期是用来做一些简单的FORM验证,基本上是在玩弄一些技巧性的东西。IE 4.0引入了DHTML,同时为了对抗Netscape的Javascript,提出了自己的脚本语言JScript,除了遵循EMAC的标准之外,同时增加了许多扩展,如下要提到的OOP编程就是其中的一个,为了命且概念,我以

1万+

node.js学习之路(一)之“面向对象的JavaScript入门”

一、前言node.js以JavaScript为基础,因此学习node.js之前有必要复习一下JavaScript,其中我的学习之路是先看《JavaScript高级程序设计》,后看《JavaScript语言精粹》,准备再继续看《webkit技术内幕》。其中JavaScript面向对象的特性在node.js里是必须熟练掌握和深刻理解的知识点,因此特地提出来一起复习。二、JavaScript面向对象入门J

918

【JavaScript】JS高级-面向对象编程

《课前补充》 面向对象编程:Object Oriented Programming 一、单例设计模式 (Singleton Pattern) 1、单例模式(就是普通对象) 表现形式: 在单例模式中,person1不仅仅是对象名,它被称为“命名空间[NameSpace]”(给堆内存空间起个名字),把描述事务的属性存放到命名空间,多个命名空间是独立分开的,互不冲突。 var person1 = { name:"", xxx:xxx } 作用: 把描述同一件事务的属性和特征进行“分组、归类”(存储在同一堆

zhangankang的博客 315

【JavaScript】JS中的面向对象开发

ES6 通过引入class语法、继承、静态方法、getter 和 setter 等特性,使得 JavaScript 的面向对象编程更加简洁和强大。通过这些特性,开发者可以使用更直观的方式定义类和对象,构建复杂的应用程序逻辑。

xwh20010816的博客 621

JavaScript 面向对象

面向对象概论: 面向对象是相对于面向过程来讲的,面向对象方法,把相关的数据和方法组织为一个整体来看待,从更高的层次来进行系统建模,更贴近事物的自然运行模式。 一切事物皆对象 对象具有封装和继承特性 对象与对象之间使用消息通信,各自存在信息隐藏 创建对象的几种常用方式 1.使用Object或对象字面量创建对象 2.工厂模式创建对象 3.构造函数模式创建对象 4.原型模式创建对象 1....

IMCLT的博客 243

js开发: JavaScript 中的面向对象的初步理解

我在学习JS的面向对象编程的时候,总是有两个奇怪的问题。 第一个就是:面向对象在JS中很少用到。。。   可能是目前自己做的项目还是比较简单,前端方面的任务我几乎都是用面向过程的方式写的,所以就导致,我啃了那么久的书,代码也跟着书上的例子敲了,但好像一点收获也没有,还是不知道JS的面向对象有什么用。当然,我知道是自己目光短浅。。因为JS可是像个单身很久的家伙一样一直强调“万物皆对象

Generon的博客 519
上一篇: squid资料整理
下一篇: JavaScript中arguments对象
spring21st
博客等级 码龄21年 450粉丝 407原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值