位置: 编程技术 - 正文

JavaScript的面向对象编程基础(js面向对象的几种方式)

编辑:rootadmin

推荐整理分享JavaScript的面向对象编程基础(js面向对象的几种方式),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:js中的面向对象,js中的面向对象,js面向对象的三大特性,javascript面向对象编程指南,js中的面向对象,javascript面向过程,javascript面向对象编程指南,javascript面向对象编程指南,内容如对您有帮助,希望把文章链接给更多的朋友!

重新认识面向对象为了说明 JavaScript 是一门彻底的面向对象的语言,首先有必要从面向对象的概念着手 , 探讨一下面向对象中的几个概念:

一切事物皆对象 对象具有封装和继承特性 对象与对象之间使用消息通信,各自存在信息隐藏

以这三点做为依据,C++ 是半面向对象半面向过程语言,因为,虽然他实现了类的封装、继承和多态,但存在非对象性质的全局函数和变量。Java、C# 是完全的面向对象语言,它们通过类的形式组织函数和变量,使之不能脱离对象存在。但这里函数本身是一个过程,只是依附在某个类上。

然而,面向对象仅仅是一个概念或者编程思想而已,它不应该依赖于某个语言存在。比如 Java 采用面向对象思想构造其语言,它实现了类、继承、派生、多态、接口等机制。但是这些机制,只是实现面向对象编程的一种手段,而非必须。换言之,一门语言可以根据其自身特性选择合适的方式来实现面向对象。所以,由于大多数程序员首先学习或者使用的是类似 Java、C++ 等高级编译型语言(Java 虽然是半编译半解释,但一般做为编译型来讲解),因而先入为主地接受了“类”这个面向对象实现方式,从而在学习脚本语言的时候,习惯性地用类式面向对象语言中的概念来判断该语言是否是面向对象语言,或者是否具备面向对象特性。这也是阻碍程序员深入学习并掌握 JavaScript 的重要原因之一。实际上,JavaScript 语言是通过一种叫做 原型(prototype)的方式来实现面向对象编程的。下面就来讨论 基于类的(class-based)面向对象和 基于原型的 (prototype-based) 面向对象这两种方式在构造客观世界的方式上的差别。基于类的面向对象和基于原型的面向对象方式比较在基于类的面向对象方式中,对象(object)依靠 类(class)来产生。而在基于原型的面向对象方式中,对象(object)则是依靠 构造器(constructor)利用 原型(prototype)构造出来的。举个客观世界的例子来说明二种方式认知的差异。例如工厂造一辆车,一方面,工人必须参照一张工程图纸,设计规定这辆车应该如何制造。这里的工程图纸就好比是语言中的 类 (class),而车就是按照这个 类(class)制造出来的;另一方面,工人和机器 ( 相当于 constructor) 利用各种零部件如发动机,轮胎,方向盘 ( 相当于 prototype 的各个属性 ) 将汽车构造出来。事实上关于这两种方式谁更为彻底地表达了面向对象的思想,目前尚有争论。但笔者认为原型式面向对象是一种更为彻底的面向对象方式,理由如下:首先,客观世界中的对象的产生都是其它实物对象构造的结果,而抽象的“图纸”是不能产生“汽车”的,也就是说,类是一个抽象概念而并非实体,而对象的产生是一个实体的产生;其次,按照一切事物皆对象这个最基本的面向对象的法则来看,类 (class) 本身并不是一个对象,然而原型方式中的构造器 (constructor) 和原型 (prototype) 本身也是其他对象通过原型方式构造出来的对象。再次,在类式面向对象语言中,对象的状态 (state) 由对象实例 (instance) 所持有,对象的行为方法 (method) 则由声明该对象的类所持有,并且只有对象的结构和方法能够被继承;而在原型式面向对象语言中,对象的行为、状态都属于对象本身,并且能够一起被继承(参考资源),这也更贴近客观实际。最后,类式面向对象语言比如 Java,为了弥补无法使用面向过程语言中全局函数和变量的不便,允许在类中声明静态 (static) 属性和静态方法。而实际上,客观世界不存在所谓静态概念,因为一切事物皆对象!而在原型式面向对象语言中,除内建对象 (build-in object) 外,不允许全局对象、方法或者属性的存在,也没有静态概念。所有语言元素 (primitive) 必须依赖对象存在。但由于函数式语言的特点,语言元素所依赖的对象是随着运行时 (runtime) 上下文 (context) 变化而变化的,具体体现在 this 指针的变化。正是这种特点更贴近 “万物皆有所属,宇宙乃万物生存之根本”的自然观点。

JavaScript 面向对象基础知识

虽然 JavaScript 本身是没有类的概念,但它仍然有面向对象的特性,虽然和一般常见的面向对象语言有所差异。

简单的创建一个对象的方法如下:

如果仅仅需要一个对象,而不需要对象的其它实例的情况下,推荐用字面量法。如果需要对象的多个实例,则推荐函数构造法。定义属性和方法

函数构造法:

字面量法:

以上两种方法创建的对象中,都有一个名为 “iAm” 的属性,还有一个名为 “whatAmI” 的方法。属性是对象中的变量,方法则是对象中的函数。

如何获取属性及调用方法:

JavaScript的面向对象编程基础(js面向对象的几种方式)

调用方法的时候后面一定要加上括号,如果不加括号,那么它只是返回方法的引用而已。两种创建对象方法的区别

函数构造法里面定义属性和方法的时候,都要用前缀 this,字面量法不需要。 函数构造法给属性和方法赋值的时候用的是 =,字面量法用的是 : 。 如果有多个属性或方法,函数构造法里面用 ; 隔开,字面量法用 , 隔开。

对于字面量法创建的对象,可以直接用对象的引用调用其属性或方法:

而对于函数构造法而言,需要创建对象的实例,才能调用其属性或方法:

使用构造函数

现在再来回归一下之前的函数构造法:

其实它看起来就是个函数,既然是函数,能不能给它传参数呢?将代码再稍作修改:

再将对象实例化,并传入参数:

程序最终输出 I am an object of the JavaScript language。两种创建对象的方法,我该用哪种?

对于字面量方法而言,因为它不需要实例化,所以如果修改了某对象的值,那么这个对象的值就永久地被修改了,其它任何地方再访问,都是修改后的值。而对于函数构造法而言,修改值的时候是修改其实例的值,它可以实例化 N 个对象出来,每个对象都可以拥有自己不同的值,而且互不干扰。比较以下几段代码。

先看字面量法:

即便创建了一个新的变量指向这个对象,结果还是一样的:

再看函数构造法:

可以看到,用函数构造法实例化出来的不同对象,相互是独立的,可以各自拥有不同的值。所以说,到底用哪种方法来创建对象,需取决于各自实际情况。

理解和运用JavaScript的闭包机制 伟大的爱因斯坦同志说过:如果你无法向一个6岁小孩解释清楚某问题,那说明你自己都没整明白。然而,当我向一个岁的朋友解释什么是闭包时,却

再JavaScript的jQuery库中编写动画效果的指南 jquery中常用的动画的方法就是hide()与show().$(element).hide()这段代码可以与这相等element.css("display","none")在hide(time)与show(time)中填入事件,可以慢慢消失跟显

JavaScript变量的作用域全解析 变量作用域是程序中定义这个变量的区域。先来看一段示例:/*代码1*/varscope="global";functioncheckScope(){varscope="local";functionchildCheck(){varscope="childLocal";document.

标签: js面向对象的几种方式

本文链接地址:https://www.jiuchutong.com/biancheng/379051.html 转载请保留说明!

上一篇:深入学习JavaScript中的原型prototype(java深入理解)

下一篇:理解和运用JavaScript的闭包机制(理解和运用的重要性要站在哪个的视觉去判断)

  • 印花税计提时应入什么科目
  • 定期定额个体工商户怎么报税
  • 兼职劳务报酬需要发票吗
  • 公司购个人的二手车流程
  • 扣缴义务人怎么删除
  • 建筑企业外地施工成立分公司吗
  • 如何做现金支票凭证
  • 预计负债收回的会计分录
  • 小企业作废的发票怎么开
  • 劳务报酬申报个税后还需要开发票吗
  • 同一个客户有应收也有应付怎么办
  • 专用发票可以下账吗
  • 银行抵债资产怎么管理
  • 收到借款利息怎么做会计分录
  • 个人到税务局怎么开增值税普通发票
  • 购进货物未取得增值税专用发票
  • 学校管理费是什么意思
  • 物业服务费属于什么合同印花税
  • 营改增后企业要交哪些税
  • 合并报表盈余公积跟母公司有什么关系
  • 公司注销要给钱吗
  • 一般纳税人收到专票怎么做分录
  • 公司不盈利用交税吗
  • 代扣代缴手续费要交增值税吗
  • 苹果电脑截图快捷键
  • 上月开的发票会计漏做帐本月应如何补做账?
  • 暂存款转结余
  • linux模块的概念
  • bios怎么关
  • php ftp功能
  • avgcc32.exe进程是什么文件产生的 avgcc32进程信息查询
  • php fopen()
  • 圣克鲁斯河特点
  • PHP:mcrypt_get_iv_size()的用法_Mcrypt函数
  • 特许权使用费20%
  • 事业单位以固定薪资为准
  • 递延收益摊销金额
  • php array_slice
  • PyTorch深度学习实战 | 基于ResNet的人脸关键点检测
  • php上传文件限制大小
  • 电池成本什么时候能降低
  • ps一个页面怎么选中画板
  • 弃置费用预计负债的摊余成本
  • 广告公司纳税人类型
  • sql row_number()over()
  • 建筑公司劳务分包开票内容怎么写
  • 管理费用的会计要素
  • 咨询费收入成本怎么算
  • 转出未交增值税借方余额怎么处理
  • 母公司溢价收购子公司
  • 流动资金周转次数计算公式
  • 代扣代缴的增值税额
  • 关税的计税方式一般可以分为
  • 应交税费减免税额在借方还是贷方
  • 会计往来账怎么用excel做更快
  • 资金会计应当设置的科目
  • mysql数据库类型有哪些?如何选择合适的数据类型
  • microsoft wlan
  • unins000.exe - unins000是什么意思
  • win8.1系统安装
  • macos finder的应用程序列表在哪里
  • linuxsu命令作用
  • linux没有ssh
  • win7服务在哪里打开
  • nod32kui.exe - nod32kui是什么进程 作用是什么
  • linux 运行二进制文件
  • win10系统office2007每次打开都要配置
  • win8系统怎么设置桌面
  • 有usb3.0驱动的win7
  • Linux系统开源VPN Openvpn进程异常退出解决方法
  • win8的开始
  • python 变参
  • unity 子弹效果 粒子
  • vue组件精讲
  • js中!
  • Landroid/support/v7/internal/widget/ActionBarOverlayLayout;.stopNestedScroll
  • javascript操作网页
  • javascript常用语句
  • jquery增加一行和删除
  • 房产契税退税在哪里办理
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设