不二如是 发表于 2018-6-21 17:28:11

003 ※ 一个检测类引出的函数祖先

本帖最后由 不二如是 于 2018-6-22 16:39 编辑

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





在上一讲的尾声,因为玄武大佬要接一个重要电话,而暂且结束。

回到工位的小不二仔细整理了一下,玄武大佬刚才教自己的东西简直太nice了,深感:“实践才是检验真理的唯一标准。”

时间过的很快,吃过午饭的小不二,在和同事聊聊天后,继续投入到了下午的工作中。

下午正在写项目进度报告的玄武,突然想起来上午和小不二被打断的对话。

通过内网的通讯软件,呼小不二过来~

一看到,玄武大佬呼唤自己,小不二抱着电脑又过去了。

“小不二,上午的概念,理解的怎么样了?”

“嗯,很棒,好东西细节性的东西,原来自己都没有好好在意~”

“是阿,对于你们这些只啃过书本的新手,最缺的就是经验,项目开发上有问题可以随时问我或者问同事哦”

“嗯嗯,好的好的”,听到这么照顾自己的上司,小不二内心很感动~

“对了,上午我记得最后你问了一个什么问题?”

“嗯,是的,我当时想问您:当我和同事都对类实例化(类创建对象),我们每个人都会一套属于的自己的方法?”

边说着,小不二便打开了代码:
varcheckObject = {
            this.checkName=function(){},
            this.checkPassword=function(){},
            this.checkEmail=function(){}
    }

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

“当然了,你看,我们是把所有的方法放在了函数内部,然后通过this定义,所以每一次通过new来创建新对象的时候,新创建的对象都会对类的this上的属性进行复制。”

玄武看小不二听的入神,继续说到。

“所以这些新创建的对象都会拥有自己的一套方法。”

听到这里,小不二突然想到了小甲鱼曾经说过的新对象内存消耗问题。

“是不是这样造成的消耗是很大的?”

“可以吗,连这个都知道,我们可用原型来修改下。”
(推荐阅读:0 0 8 6 ★ Js对象与禅 |【南无阿弥陀佛】)

修改如下:
varcheckObject = function(){
      checkObject.prototype.checkName=function(){},
      checkObject.prototype.checkPassword=function(){},
      checkObject.prototype.checkEmail=function(){}
    }

"这样我们创建实例的时候,创建出来的对象所拥有的方法就只有一个了,因为protoype原型依次寻找,找到的方法都是同一个,它们都是绑定在checkObject类的原型上。"

玄武继续说道。

“这种方式我们要将prototype写很多遍,所以还可以这么写”

修改如下:
varcheckObject = function(){
      checkObject.prototype = {
            checkName : function(){},
            checkPassword : function(){},
            checkEmail : function(){}
      }
    }

"这么写的话,有一点要注意,这两种方式不能混用,如果混用,后面为对象的原型对象赋值新对象时,那么它将会覆盖掉之前对prototype对象赋值的方法。"

“嗯嗯,好厉害,不过我们要使用这种方式定义的类是不是就要这么写”,小不二心里早已崇拜的不要不要的~

代码:
var a = new checkObject();
a.checkName();
    a.checkPassword();
    a.checkEmail();

"没错,但是你发现没有,你的对象a写了3遍,想一想有什么办法优化吗?"

“嗯.......”

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



课后作业


1、如果将两种prototype创建类方式混用,会发生什么?



答案:
**** 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

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

kkkkkkkkkk

优时风 发表于 2020-6-20 16:54:00

混乱chaos

hanguahanni 发表于 2021-2-3 18:01:10

覆盖

jack6666 发表于 2022-10-21 19:36:47

1

CKP_1998 发表于 2022-12-22 20:14:00

{:10_243:}{:10_243:}{:10_243:}
页: [1]
查看完整版本: 003 ※ 一个检测类引出的函数祖先