马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 不二如是 于 2018-7-5 10:32 编辑
关于为什么要学习JavaScript设计模式,请看:传送门
上一节尾声,小不二最后被玄武的代码难住了:var checkObject = {
checkObject.checkName=function(){},
checkObject.checkPassword=function(){},
checkObject.checkEmail=function(){}
}
看到再次陷入沉思的小不二,玄武说到。
“这么写,确实有些诡异,但是我们先声明一个对象,然后为它添加方法,在JS中函数也是对象,所以这么写完全没问题。”
(补充:0 2 1 8 ★JS就是tmd面向对象语言 |【万物皆对象】)
“还有,这么写的使用方式和之前一样,比如”checkObject.checkEmail()。"
“是的,但是,玄武大佬,这么写会不会让别人调用我的方法时,变得有些麻烦?”
“很好,的确是这样的,因为这个对象不能在复制一份,当它用new关键字创建新的对象时,新对象是不能继承这些方法的。”
“那我们这么写还有什么意义吗?”
“意义很大,因为上面的这种写法,只要在优化下,让它可以被复制,我们就获得了一个真对象。”
小不二的头有点晕。
“小不二,你知道怎么才能让我这个方法从假对象变为真对象吗?”
“嗯,是不是这样加一个return?”
小不二修改了上面的代码:var checkObject = {
return{
checkObject.checkName=function(){},
checkObject.checkPassword=function(){},
checkObject.checkEmail=function(){}
}
}
“对的,将这些方法放在一个函数对象中,这样每次调用這个函数时,就会把之前写的对象返回出来。”
小不二,看到自己写对了,心里又高兴了起来,还好小甲鱼老师之前讲过~
“是的,这样执行过程中表面上是checkObject类对象,实际上返回的是新对象,这样别人调用我的代码也不会相互影响了。”
小不二边说,边把调用写好:var tst = checkObject();
tst.checkName();
"嗯,很好",玄武大佬鼓励到。
“通过创建一个新对象完成了我们的需求,但是呢,它不是一个真正意义上的创建方式哦,并且创建的对象tst和对象checkObject没有任何关系(返回的对象本身和checkObject对象无关)。只要在这么优化下就可以了”
玄武又修改了小不二的代码:
"这样写后,就可以用checkObject类创建的对象了。"
“那么我们使用它还像之前那样创建对象的方法创建吗?”,小不二问到。
“肯定不是啦,既然是一个类,就要用new来创建了~”
“哦哦,我知道了,是不是这么写”
var checkObject = {
this.checkName=function(){},
this.checkPassword=function(){},
this.checkEmail=function(){}
}
var tst =new checkObject();
tst.checkName();
“没错。”
“大佬,那当我和同事都对类实例化(类创建对象),我们每个人都会一套属于的自己的方法?”小不二不解的问到。
此时玄武大佬的手机响了,是一位重要的客户(金主)打算对项目需求进行修改。。。
玄武指了指自己的电话,小不二知趣的抱起电脑回到自己的工位,整理刚才学到的东西。
预知后事如何,请看 下回分解
课后作业
1、为什么小不二用return创建对象的方式不是真正意义上的类的创建方式?var checkObject = {
return{
checkObject.checkName=function(){},
checkObject.checkPassword=function(){},
checkObject.checkEmail=function(){}
}
}
答案:
如果有收获,别忘了评分 :
这位鱼油,如果喜欢JS-设计模式,请订阅 专辑☞( 传送门)( 不喜欢更要订阅 )
|