位置: 编程技术 - 正文

关于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创建对象的几种方式)

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

  • 股东撤资涉及到哪些税如何缴纳?
  • 房产税应该怎么申报
  • 股票价值和内部价值
  • 定额发票可以用旧的营业执照发票章吗
  • 房地产公司将自建自用房产出售 土地增值税
  • 超范围经营可以赔偿吗
  • 旧公司库存如何管理
  • 周转材料低值易耗品摊销
  • 企业职工报销签单怎么写
  • 仓库货物破损处理方法
  • 国债利润收入属于收入吗
  • 增值税普通发票可以抵扣吗
  • 增值税普通发票和普通发票的区别怎么交税
  • 财产保险合同的主体变更
  • 最新科研增值税税率为多少?
  • 建筑业增值税税率2022
  • 旅游业开票问题总结二
  • 小规模纳税人自来水税率
  • 筹建期员工社保分录
  • 车间固定资产修理费
  • 应收账款应计利息公式如何理解
  • 个人如何开专票
  • 贴息债券计算公式
  • 地下车库怎么缴费
  • 四种存款账户的定义
  • 公司从一个帐户里扣税吗
  • 公司给员工的餐补有没有个税
  • 企业工商年报填错了怎么办
  • 并购动因理论有什么
  • macbook不用键盘膜会进灰吗
  • 21年最新cpu
  • 出版社购买版权是什么
  • 食品类发票入账属于什么科目
  • uni app怎么样
  • 其他应收款
  • 应付职工薪酬是负债吗
  • el-table-column formatter
  • 挪威罗弗敦岛
  • PHP:image2wbmp()的用法_GD库图像处理函数
  • vue怎么让按键启用和禁用
  • 新准则下的现金流量包括
  • three.js gui
  • edge 状态栏
  • 程序员才能看懂的梗
  • uniapp开发app视频教程
  • yolo算法百度百科
  • 人工智能lisp
  • 结转销售成本的凭证需要附件吗
  • 对供应商的罚款通知怎么写
  • 房产税收特点有哪些
  • 存货盘亏计入什么收入
  • 年度结转增值税
  • java面试相关
  • 劳务派遣合法吗
  • 微信收款和支付宝收款有啥区别
  • sqlServer查询当前ip地址
  • 转出未交增值税会计处理
  • 在建工程前期投标流程
  • 增值税 附加税费
  • 公司市场部门有什么职位
  • 京东提现一般多久到账
  • 为什么说进项和销项是相对的
  • 建筑装饰行业工业化道路研究参考文献
  • 管理会计运用什么软件
  • 工业企业进项税和销项税均为17%
  • win10系统应用和浏览器控制需要启用吗
  • linux中压缩文件
  • win8创建我的电脑
  • win10系统下怎么安装caxa2016电子图板 caxa2016电子图板安装详细图文教程
  • 没有协议盒可以设置协议吗
  • 电脑qq清理
  • config_system_switchs
  • opengl三维场景
  • js实现表单提交
  • unity特色
  • jquery 获取屏幕高度
  • 信托公司抵押房能买吗
  • 河南国税网上办证流程
  • 成都网上税务局
  • 汽车装潢业务是干什么的
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设