马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 不二如是 于 2018-6-22 16:39 编辑
关于为什么要学习JavaScript设计模式,请看:传送门
在上一讲的尾声,因为玄武大佬要接一个重要电话,而暂且结束。
回到工位的小不二仔细整理了一下,玄武大佬刚才教自己的东西简直太nice了,深感:“实践才是检验真理的唯一标准。”
时间过的很快,吃过午饭的小不二,在和同事聊聊天后,继续投入到了下午的工作中。
下午正在写项目进度报告的玄武,突然想起来上午和小不二被打断的对话。
通过内网的通讯软件,呼小不二过来~
一看到,玄武大佬呼唤自己,小不二抱着电脑又过去了。
“小不二,上午的概念,理解的怎么样了?”
“嗯,很棒,好东西细节性的东西,原来自己都没有好好在意~”
“是阿,对于你们这些只啃过书本的新手,最缺的就是经验,项目开发上有问题可以随时问我或者问同事哦”
“嗯嗯,好的好的”,听到这么照顾自己的上司,小不二内心很感动~
“对了,上午我记得最后你问了一个什么问题?”
“嗯,是的,我当时想问您:当我和同事都对类实例化(类创建对象),我们每个人都会一套属于的自己的方法?”
边说着,小不二便打开了代码: var checkObject = {
this.checkName=function(){},
this.checkPassword=function(){},
this.checkEmail=function(){}
}
var tst =new checkObject();
tst.checkName();
“当然了,你看,我们是把所有的方法放在了函数内部,然后通过this定义,所以每一次通过new来创建新对象的时候,新创建的对象都会对类的this上的属性进行复制。”
玄武看小不二听的入神,继续说到。
“所以这些新创建的对象都会拥有自己的一套方法。”
听到这里,小不二突然想到了小甲鱼曾经说过的新对象内存消耗问题。
“是不是这样造成的消耗是很大的?”
“可以吗,连这个都知道,我们可用原型来修改下。”
(推荐阅读:0 0 8 6 ★ Js对象与禅 |【南无阿弥陀佛】)
修改如下:var checkObject = function(){
checkObject.prototype.checkName=function(){},
checkObject.prototype.checkPassword=function(){},
checkObject.prototype.checkEmail=function(){}
}
"这样我们创建实例的时候,创建出来的对象所拥有的方法就只有一个了,因为protoype原型依次寻找,找到的方法都是同一个,它们都是绑定在checkObject类的原型上。"
玄武继续说道。
“这种方式我们要将prototype写很多遍,所以还可以这么写”
修改如下:var checkObject = function(){
checkObject.prototype = {
checkName : function(){},
checkPassword : function(){},
checkEmail : function(){}
}
}
"这么写的话,有一点要注意,这两种方式不能混用,如果混用,后面为对象的原型对象赋值新对象时,那么它将会覆盖掉之前对prototype对象赋值的方法。"
“嗯嗯,好厉害,不过我们要使用这种方式定义的类是不是就要这么写”,小不二心里早已崇拜的不要不要的~
代码:var a = new checkObject();
a.checkName();
a.checkPassword();
a.checkEmail();
"没错,但是你发现没有,你的对象a写了3遍,想一想有什么办法优化吗?"
“嗯.......”
预知后事如何,请看 下回分解
课后作业
1、如果将两种prototype创建类方式混用,会发生什么?
答案:
如果有收获,别忘了评分 :
这位鱼油,如果喜欢JS-设计模式,请订阅 专辑☞( 传送门)( 不喜欢更要订阅 )
|