位置: 编程技术 - 正文

关于JavaScript定义类和对象的几种方式(下列关于javascript的叙述正确的有)

编辑:rootadmin
可以看看这个例子:   大家第一眼看到这个例子觉得输出结果是什么?‘global'?还是‘local'?其实都不是,输出的是undefined,不用迷惑,我的题外话就是为了讲这个东西的。 其实很简单,看一看JavaScript运行机制就会明白。我们可以把这种现象看做“预声明”。但是如果稍微深究一下,会明白得更透彻。   这里其实涉及到对象属性绑定机制。因为所有JavaScript函数都是一个对象。在函数里声明的变量可以看做这个对象的“类似属性”。对象属性的绑定在语言里是有分“早绑定”和“晚绑定”之分的。   【早绑定】 是指在实例化对象之前定义其属性和方法。解析程序时可以提前转换为机器代码。通常的强类型语言如C++,java等,都是早绑定机制的。而JavaScript不是强类型语言。它使用的是“晚绑定”机制。   【晚绑定】 是指在程序运行前,无需检查对象类型,只要检查对象是否支持特性和方法即可。可以在绑定前对对象执行大量操作而不受任何惩罚。 上面代码出现的“预声明”现象,我们大可用“晚绑定”机制来解释。在函数的作用域中,所有变量都是“晚绑定”的。 即声明是顶级的。所以上面的代码和下面的一致: 在alert(a)之前只对a作了声明而没有赋值。所以结果可想而知。 <!-- 题外话到此结束 -->   RT:本文要说的是,在JavaScript里,我所知道的几种定义类和对象的方式:<! -- 声明:以下内容大部分来自《JavaScript高级程序设计》,只是个人叙述方式不同而已 -- >   【直接量方式】   使用直接量构建对象是最基础的方式,但也有很多弊端。 我们构建了一个对象Obj,它有一个属性name,一个方法showName。但是如果我们要再构建一个类似的对象呢?难道还要再重复一遍? NO!,我们可以用一个返回特定类型对象的工厂函数来实现。就像工厂一样,流水线的输出我们要的特定类型结果。   【工厂方式】 这种工厂函数很多人是不把他当做构建对象的一种形式的。一部分原因是语义:即它并不像使用了运算符new来构建的那么正规。还有一个更大的原因,是因为这个工厂每次产出一个对象都会创建一个新函数showName(),即每个对象拥有不同的版本,但实际上他们共享的是同一个函数。 有些人把showName在工厂函数外定义,然后通过属性指向该方法,可以避开这个问题: 可惜的是,这种方式让showName()这个函数看起来不像对象的一个方法。   【构造函数方式】 这种方式是为了解决上面工厂函数的第一个问题,即没有new运算符的问题。可是第二个问题它依然不能解决。我们来看看。 它的好处是不用在构造函数内新建一个对象了,因为new运算符执行的时候会自动创建一个对象,并且只有通过this才能访问这个对象。所以我们可以直接通过this来对这个对象进行赋值。而且不用再return,因为this指向默认为构造函数的返回值。 同时,用了new关键字来创建我们想要的对象是不是感觉更“正式”了。 可惜,它仍然不能解决会重复生成方法函数的问题,这个情况和工厂函数一样。   【原型方式】 这种方式对比以上方式,有个很大的优势,就是它解决了方法函数会被生成多次的问题。它利用了对象的prototype属性。我们依赖原型可以重写对象实例。 我们依赖原型对构造函数进行重写,无论是属性还是方法都是通过原型引用的方式给新建的对象,因此都只会被创建一次。可惜的是,这种方式存在两个致命的问题: 1。没办法在构建对象的时候就写入想要的属性,因为原型在构造函数作用域外边,没办法通过传递参数的方式在对象创建的时候就写入属性值。只能在对象创建完毕后对值进行重写。 2。致命问题在于当属性指向对象时,这个对象会被多个实例所共享。考虑下面的代码: 是的,当flag属性指向对象时,那么实例obj1和obj2都共享它,哪怕我们仅仅改变了obj1的flag属性,但是它的改变在实例obj2中任然可见。 面对这个问题,让我们不得不想是否应该把【构造函数方式】和【原型方式】结合起来,让他们互补。。。   【构造函数和原型混合方式】 我们让属性用构造函数方式创建,方法用原型方式创建即可: 这种方式有效地结合了原型和构造函数的优势,是目前用的最多,也是副作用最少的方式。 不过,有些追求完美的家伙还不满足,因为在视觉上还没达到他们的要求,因为通过原型来创建方法的过程在视觉上还是会让人觉得它不太像实例的方法(尤其对于传统OOP语言的开发者来说。) 所以,我们可以让原型活动起来,让他也加入到构造函数里面去,好让这个构造函数在视觉上更为统一。而这一系列的过程只需用一个判断即可完成。 如上,用_init作为一个标志来判断是否已经给原型创建了方法。如果是那么就不再执行。这样其实在本质上是没有任何变化的,方法仍是通过原型创建,唯一的区别在于这个构造函数看起来“江山统一”了。 但是这种动态原型的方式是有问题的,《JavaScript高级程序设计》里并没有深究。创建第一个对象的时候会因为prototype在对象实例化之前没来的及建起来,是根本无法访问的。所以第一个对象是无法访问原型方法的。同时这种方式在子类继承中也会有问题。 关于解决方案,我会在下一文中说明。 其实就使用方便来说的话,个人觉得是没必要做这个判断的。。。呵呵 ^_^

推荐整理分享关于JavaScript定义类和对象的几种方式(下列关于javascript的叙述正确的有),希望有所帮助,仅作参考,欢迎阅读内容。

关于JavaScript定义类和对象的几种方式(下列关于javascript的叙述正确的有)

文章相关热门搜索词:下列关于javascript的叙述正确的有,下列描述中,关于js函数定义方式,javascript定义,javascript的定义,下列关于javascript的叙述正确的有,javascript定义,关于javascript函数,下列关于javascript的叙述正确的有,内容如对您有帮助,希望把文章链接给更多的朋友!

学习面向对象之面向对象的基本概念:对象和其他基本要素 什么是对象对象是一件事,一个实体,一个名词,概括来说:万物皆是对象一个对象保存了某些信息,并知道如何执行某些操作对象的状态和行为对象

学习面向对象之面向对象的术语 面向对象的术语类类作为设计蓝图来创建对象的代码段,它描述了对象的特征;该对象具有什么样的属性,怎样使用对象完成一些任务,他对事件进行

JavaScript OOP面向对象介绍 OOP语言使我们有能力自定义对象和变量类型。面向对象编程JavaScript是面向对象的编程语言(OOP)。OOP语言使我们有能力定义自己的对象和变量类型。对象

标签: 下列关于javascript的叙述正确的有

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

上一篇:js创建对象的几种常用方式小结(推荐)(js创建对象的几种方式)

下一篇:学习面向对象之面向对象的基本概念:对象和其他基本要素(面向对象的基础知识)

  • 房地产税收有哪些
  • 公账转法人私账的注意事项
  • 支付客户劳务费怎么操作
  • 融资租出的设备计入什么科目
  • 项目转包是什么意思
  • 企业多交所得税不想退税在电子税务局如何处理
  • 二手房交易税费最新规定
  • 建筑工程劳保费返还给项目部吗
  • 利用废旧物资生产设备
  • 不征税项目可以抵扣进项税吗
  • 差额发票和全额发票的税率
  • 招待费增值税能抵扣吗
  • 销售产生的磅差入什么科目?
  • 监控维护需要什么经营范围
  • 税务实名制法人和财务负责人可以是同一人吗?
  • 从财务报表中可以了解企业的哪些信息?作用是什么?
  • 固定资产停止折扣
  • 发票认证信息怎么填
  • 个人贷款走公司账户流程
  • 企业利息收入如何做分录
  • 材料未到,货款尚未支付
  • 固定资产出租需要交什么税
  • 税控盘服务费全额抵扣勾选在什么地方
  • win7的文件系统
  • 上市公司转让股票所得要交个税吗?
  • php如何实现登录和注册
  • twig里使用js变量的方法
  • 房产税和城镇土地使用税需要计提吗
  • 已勾选确认的发票怎样撤销勾选
  • anaconda3.5.2安装教程
  • react组件定义
  • php标准数据类型共有四种
  • ps命令显示进程状态
  • 广告费成本包括哪些内容
  • 建筑装饰工程公司属于什么行业
  • 通用机打发票可以查验吗
  • 出租车计入什么费
  • 企业转让无形资产取得的收益应计入营业外收入
  • 董事费收入
  • 应收帐款质保金
  • 个体户餐饮服务包括哪些经营范围
  • 项目终止前期费用核销
  • 个人所得税孩子教育怎么申报
  • sql-server
  • 母公司与子公司内部合作协议
  • 法定盈余公积的主要用途
  • 管理费用里面包括哪些明细科目
  • 办公用品开普票几个点
  • 超市预付卡销售会计分录
  • 固定资产一次性扣除后第二年账务处理
  • 其他应付款核算范围包括哪些
  • 公司注销时发现有预付款
  • 取得投资款缴纳企业所得税吗
  • 间接持股比例如何分析
  • 税控设备设置在哪儿
  • 个人独资企业核定征收取消了吗
  • 固定资产清理包括什么会计科目
  • 关税用什么会计科目
  • eclipse连接mysql代码
  • linux开机启动ftp
  • ubuntu不支持设置属性
  • ·exe病毒
  • win8系统桌面图标怎么变小
  • win7系统黑屏但电脑一直在运行
  • kernel-headers-2.2.1-4
  • linux配置静态
  • node.js的express
  • scrollview怎么用
  • css中注释的写法
  • jsonp如何解决跨域问题
  • 使用jQuery操作HTML的table表格的实例解析
  • python3.9快捷键
  • python通过编程求权重
  • 国家税务总局关于进一步优化营改增纳税服务工作的通知
  • 进项税额有哪些明细科目
  • 外经证办理流程在哪个网站申请
  • 纳税信用d级企业保留几年
  • 不予税务行政许可
  • 建行代理贵金属签约
  • 工伤保险怎么补申报
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设