鱼C论坛

 找回密码
 立即注册
查看: 3868|回复: 12

[庖丁解牛] 002 ※ 真假对象

[复制链接]
发表于 2018-6-20 15:08:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 不二如是 于 2018-7-5 10:32 编辑

关于为什么要学习JavaScript设计模式,请看:传送门




上一节尾声,小不二最后被玄武的代码难住了:
  1. var  checkObject = {
  2.         checkObject.checkName=function(){},
  3.         checkObject.checkPassword=function(){},
  4.         checkObject.checkEmail=function(){}
  5.     }
复制代码


看到再次陷入沉思的小不二,玄武说到。

“这么写,确实有些诡异,但是我们先声明一个对象,然后为它添加方法,在JS中函数也是对象,所以这么写完全没问题。”
(补充:0 2 1 8 ★JS就是tmd面向对象语言 |【万物皆对象】

“还有,这么写的使用方式和之前一样,比如”checkObject.checkEmail()。"

“是的,但是,玄武大佬,这么写会不会让别人调用我的方法时,变得有些麻烦?”

“很好,的确是这样的,因为这个对象不能在复制一份,当它用new关键字创建新的对象时,新对象是不能继承这些方法的。”

“那我们这么写还有什么意义吗?”

“意义很大,因为上面的这种写法,只要在优化下,让它可以被复制,我们就获得了一个真对象。”

小不二的头有点晕。

“小不二,你知道怎么才能让我这个方法从假对象变为真对象吗?”

“嗯,是不是这样加一个return?”

小不二修改了上面的代码:
  1. var  checkObject = {
  2.         return{
  3.             checkObject.checkName=function(){},
  4.             checkObject.checkPassword=function(){},
  5.             checkObject.checkEmail=function(){}
  6.         }
  7.     }
复制代码


“对的,将这些方法放在一个函数对象中,这样每次调用這个函数时,就会把之前写的对象返回出来。”

小不二,看到自己写对了,心里又高兴了起来,还好小甲鱼老师之前讲过~

“是的,这样执行过程中表面上是checkObject类对象,实际上返回的是新对象,这样别人调用我的代码也不会相互影响了。”

小不二边说,边把调用写好:
  1. var tst = checkObject();
  2.     tst.checkName();
复制代码


"嗯,很好",玄武大佬鼓励到。

“通过创建一个新对象完成了我们的需求,但是呢,它不是一个真正意义上的创建方式哦,并且创建的对象tst和对象checkObject没有任何关系(返回的对象本身和checkObject对象无关)。只要在这么优化下就可以了”

玄武又修改了小不二的代码:
Jun-20-2018 15-02-40.gif


"这样写后,就可以用checkObject类创建的对象了。"

“那么我们使用它还像之前那样创建对象的方法创建吗?”,小不二问到。

“肯定不是啦,既然是一个类,就要用new来创建了~”

“哦哦,我知道了,是不是这么写”

  1. var  checkObject = {
  2.             this.checkName=function(){},
  3.             this.checkPassword=function(){},
  4.             this.checkEmail=function(){}
  5.     }

  6.     var tst =new checkObject();
  7.     tst.checkName();
复制代码


“没错。”

“大佬,那当我和同事都对类实例化(类创建对象),我们每个人都会一套属于的自己的方法?”小不二不解的问到。

此时玄武大佬的手机响了,是一位重要的客户(金主)打算对项目需求进行修改。。。

玄武指了指自己的电话,小不二知趣的抱起电脑回到自己的工位,整理刚才学到的东西。

预知后事如何,请看下回分解





课后作业


1、为什么小不二用return创建对象的方式不是真正意义上的类的创建方式?
  1. var  checkObject = {
  2.         return{
  3.             checkObject.checkName=function(){},
  4.             checkObject.checkPassword=function(){},
  5.             checkObject.checkEmail=function(){}
  6.         }
  7.     }
复制代码




答案:
游客,如果您要查看本帖隐藏内容请回复





如果有收获,别忘了评分


                               
登录/注册后可看大图


这位鱼油,如果喜欢JS-设计模式,请订阅 专辑☞传送门)(不喜欢更要订阅



                               
登录/注册后可看大图

评分

参与人数 1贡献 +3 收起 理由
睦ちゃん她爹 + 3 鱼C有你更精彩^_^

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-6-20 16:55:12 | 显示全部楼层
不二你好,web课程这个顺序看了半天看不懂啊,前面的00什么的,看着比较混乱,也不知哪个在前,哪个在后。整个模块是哪些,无从看起啊!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-20 17:03:30 | 显示全部楼层
黄金猫 发表于 2018-6-20 16:55
不二你好,web课程这个顺序看了半天看不懂啊,前面的00什么的,看着比较混乱,也不知哪个在前,哪个在后。 ...


对应的淘专辑,里面都是按照顺序排列的。

从0-》100的递进,不同专辑数字后面的符号不一样~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-20 17:25:50 | 显示全部楼层
不二如是 发表于 2018-6-20 17:03
对应的淘专辑,里面都是按照顺序排列的。

从0-》100的递进,不同专辑数字后面的符号不一样~

厉害了,我还找到了微信小程序,用力更,不要停!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-30 08:37:10 | 显示全部楼层
清晰易懂,感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-26 11:05:06 | 显示全部楼层
来看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-26 22:03:12 | 显示全部楼层
kkkkkkkkkkkkk
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-6 16:27:42 | 显示全部楼层
因为不能继承类
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-20 16:48:27 | 显示全部楼层
为什么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-15 15:02:59 | 显示全部楼层
这么写语法会报错啊,为什么对象里面写呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-15 15:05:35 | 显示全部楼层
这种语法对吗,我代码粘过去的,有语法错误
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-3 17:56:14 | 显示全部楼层
fight
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-21 19:33:31 | 显示全部楼层
1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-18 13:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表