JS学习笔记-OO创建怀疑的对象

JS学习笔记-OO创建怀疑的对象

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

问了、工厂介绍,解决重码

        前面已经提到,JS中创建对象的方法。不难发现,主要的创建方法中,创建一个对象还算简单,假设创建多个类似的对象的话就会产生大量反复的代码。

 

        解决:工厂模式方法(加入一个专门创建对象的方法,传入參数避免反复)

        

         function createObject(name,age){
                  var obj =new Object();         //创建对象
                  obj.name = name;
                  obj.age = age;
                  obj.run = function(){
                          return this.name + this.age + '处理中...';
                  };
                  return obj;        //返回对象引用
         };

 

问二、引入构造函数,解决对象识别

        上面方法尽管攻克了避免反复代码出现的问题。但也带来了无法识别详细对象的问题,方法内部使用new Object的方式,最后返回该对象引用,调用该方法创建的对象返回的所有都是Object的引用。因此使用typeofinstanceof操作符时都无法区分详细对象。

        解决:构造函数(改良后的工厂方法)

         function Box(name,age){    //创建对象                  this.name = name;                  this.age = age;                  this.run = function(){                          return this.name + this.age + '处理中...';                  };         };

 

        比較:细心的童鞋就该发现了,该方法与问一中的工厂模式不同之处就在于:省略了newObject()的明文运行过程;省略了return语句,这些都由后台自己主动运行。

        而构造函数差别普通函数的地方在于其调用方式,必须用new运算符或对象冒充方式调用。

 

问三、引入prototype属性对象。解决对象之间的共享问题

        每个对象都会有一个prototype,同一时候它也是一个对象。

使用目的是为了解决共享问题,调用同一个构造函数创建的该对象会共享prototype中的属性和方法。

        解决:使用原型模式解决共享

         function Box() {} //声明一个构造函数                  Box.prototype.name = 'Lee'; //在原型里加入属性                  Box.prototype.age = 100;                  Box.prototype.run = function () { //在原型里加入方法                  return this.name + this.age + '处理中...';         };

        比較:  

构造函数创建

JS学习笔记-OO创建怀疑的对象

使用原型创建

JS学习笔记-OO创建怀疑的对象

        细节:在调用属性或方法时,採用就近原则。先查找实例中是否存在,否的话查找原型。可使用isPrototypeOf()hasOwnPrototy(),in操作符进行相关測试。

 

问四、使用组合,解决共享及传參

        原型模式创建对象省略了构造函数传參初始化的过程,这既是它的缺点又是它的长处,缺点是对象初始化的值一样,而且假设原型属性中包括有引用类型,则对一个对象进行更改。其它对象的相应属性也会跟着更改了。

        解决:组合构造函数+原型模式(解决共享和传參的问题)

         function Box(name, age) {          //不共享的使用构造函数                  this.name = name;                  this.age = age;                  this. family = ['父亲', '母亲', '妹妹'];         };         Box.prototype = {                  //共享的使用原型模式                  constructor : Box,                  run : function () {                           return this.name + this.age + this.family;                  }         };

        细节:这样的方式事实上就是将构造函数与原型一起使用。对要创建的对象分析,将须要共享的内容放入原型中,不须要的则放在构造函数里。这样也就是组合了。

        

        优化:这样分开式的写法难免有些怪异。我们将这两部分合并

        动态原型模式(第一次调用共享方法时进行初始化原型。以后就不会初始化了)

         function Box(name ,age) { //将全部信息封装到函数体内                  this.name = name;                  this.age = age;                  if (typeof this.run != 'function') {//仅在第一次调用的初始化                           Box.prototype.run = function () {                                   return this.name +this.age + '处理中...';                           };                  }         }

 

中结:

        学习JS中,还是非常须要对正统面向对象语言的理解的,在这里我们学习了使用构造函数以及原型来创建对象,理解了二者的概念,对于后面的JS中面向对象深入学习会非常有帮助。创造出各种不同的方法来解决的不同情况下的问题,了解按需这些人才。

版权声明:本文博主原创文章,博客,未经同意不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/117101.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • platform_driver_register调用probe

    platform_driver_register调用probekernel_init中do_basic_setup()->driver_init()->platform_bus_init()->…初始化platformbus(虚拟总线)设备向内核注册的时候platform_device_register()->platform_device_add()->…内核把设备挂在虚拟的platformbus下驱动注册的时候platform_dri

  • USB设备驱动程序开发框架[通俗易懂]

    USB设备驱动程序开发框架[通俗易懂]USB设备驱动程序开发框架USB设备驱动程序开发框架的源代码文件文件名说明Driver.h驱动程序头文件DrvInit.c入口例程和卸载例程DrvPnp.c即插即用例程DrvDispatch.c分发例程DrvPowe

  • HTML导航栏的四种制作方法,jQuery+CSS3实现四种应用广泛的导航条制作实例详解

    HTML导航栏的四种制作方法,jQuery+CSS3实现四种应用广泛的导航条制作实例详解导航条的使用很广,每个网站都会做出具有自己特色的导航条。最近特地去了解了各种类型的导航条,比如具有高亮显示的导航条,中英文互相切换的导航条,具有弹性动画的导航条,甚至是具有摩擦运动动画的导航条(文字下面有横线)等。每种导航条都有自己的特色,比如高亮显示的导航条看起来比较简单,但是视觉效果还不错,具有动画效果的导航条在视觉上也是有很好的效果。接下来将会一一介绍4种应用比较广的导航条,即:高亮显示的导…

  • 最低公共祖先java_洛谷是啥

    最低公共祖先java_洛谷是啥原题链接题目描述如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先。输入格式第一行包含三个正整数 N,M,SN,M,S,分别表示树的结点个数、询问的个数和树根结点的序号。接下来 N-1N−1 行每行包含两个正整数 x, yx,y,表示 xx 结点和 yy 结点之间有一条直接连接的边(数据保证可以构成树)。接下来 MM 行每行包含两个正整数 a, ba,b,表示询问 aa 结点和 bb 结点的最近公共祖先。输出格式输出包含 MM 行,每行包含一个正整数,依次为每一个询问的结果。输入

  • python3异常可直接抛出_python自定义异常

    python3异常可直接抛出_python自定义异常python抛出异常的方法发布时间:2020-08-1411:10:34来源:亿速云阅读:89作者:小新这篇文章主要介绍python抛出异常的方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!异常是Python对象,表示一个错误。当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。python学习网,大量的免费python视频教程,欢迎在线学习!常见异常#…

    2022年10月18日
  • py2app打包「建议收藏」

    安装cndevOE运行时依赖的库:1.安装python运行环境下载python-2.5.1-macosx.dmg,安装。打开终端,输入python看到version是为2.5.1,安装成功。2.安装wxPython下载wxPython2.8-osx-unicode-2.8.9.1-universal-py2.5.dmg,安装。打开终端,输入python,在shell下输入:im

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号