不二如是 发表于 2018-6-20 15:08:04

002 ※ 真假对象

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

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



上一节尾声,小不二最后被玄武的代码难住了:
varcheckObject = {
      checkObject.checkName=function(){},
      checkObject.checkPassword=function(){},
      checkObject.checkEmail=function(){}
    }

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

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

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

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

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

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

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

小不二的头有点晕。

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

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

小不二修改了上面的代码:
varcheckObject = {
      return{
            checkObject.checkName=function(){},
            checkObject.checkPassword=function(){},
            checkObject.checkEmail=function(){}
      }
    }

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

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

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

小不二边说,边把调用写好:
var tst = checkObject();
    tst.checkName();

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

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

玄武又修改了小不二的代码:


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

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

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

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

varcheckObject = {
            this.checkName=function(){},
            this.checkPassword=function(){},
            this.checkEmail=function(){}
    }

    var tst =new checkObject();
    tst.checkName();

“没错。”

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

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

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

预知后事如何,请看下回分解{:10_303:}



课后作业


1、为什么小不二用return创建对象的方式不是真正意义上的类的创建方式?
varcheckObject = {
      return{
            checkObject.checkName=function(){},
            checkObject.checkPassword=function(){},
            checkObject.checkEmail=function(){}
      }
    }



答案:
**** Hidden Message *****



如果有收获,别忘了评分{:10_281:} :

http://xxx.fishc.com/forum/201709/19/094516hku92k2g4kefz8ms.gif

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

http://xxx.fishc.com/forum/201803/21/151715umqz1qoywp11wjbq.gif

黄金猫 发表于 2018-6-20 16:55:12

不二你好,web课程这个顺序看了半天看不懂啊,前面的00什么的,看着比较混乱,也不知哪个在前,哪个在后。整个模块是哪些,无从看起啊!

不二如是 发表于 2018-6-20 17:03:30

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


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

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

黄金猫 发表于 2018-6-20 17:25:50

不二如是 发表于 2018-6-20 17:03
对应的淘专辑,里面都是按照顺序排列的。

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

厉害了,我还找到了微信小程序,用力更,不要停!

霸气小亮 发表于 2018-6-30 08:37:10

清晰易懂,感谢

oujq2541 发表于 2018-7-26 11:05:06

来看看

lvfen 发表于 2018-7-26 22:03:12

kkkkkkkkkkkkk

TCY 发表于 2018-12-6 16:27:42

因为不能继承类

优时风 发表于 2020-6-20 16:48:27

为什么

kmq116 发表于 2021-1-15 15:02:59

这么写语法会报错啊,为什么对象里面写呢

kmq116 发表于 2021-1-15 15:05:35

这种语法对吗,我代码粘过去的,有语法错误

hanguahanni 发表于 2021-2-3 17:56:14

fight

jack6666 发表于 2022-10-21 19:33:31

1
页: [1]
查看完整版本: 002 ※ 真假对象