码迷,mamicode.com
首页 > 编程语言 > 详细

javascript 犀牛书 随笔(二)

时间:2018-08-01 23:52:41      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:返回   遍历   运算符   必须   nbsp   外卖   als   sub   那些事   

 风和日丽,小枘坐在电脑前,旁边放了一杯清茶

 好一个下午,敲着代码,人生啊。

突然,一阵钥匙的声音打破了平静,是妈妈醒言回来了。

“吃了吗”

“没“

“那叫个外卖”

“哦”

小枘点了外卖,继续去电脑旁边了。这时醒言打开音响,去洗澡了。

“妈 我学习呢 你声音小点”

“这是我家”

小枘心里一沉

外卖来了,醒言洗完了澡

小枘打开了饭盒,埋头吃着

想着每天晚上 醒言和爸爸的电视电影重低音炮 没的商量 小枘很失望

吃完了 小枘放下一句

“你们从来不关心我的学习”

拎着包 跑出去了

外面风越刮越大,小枘走在路上,眼睛有些湿润。不知不觉间来到了学校偌大的操场旁,天色有些黑了,她仿佛看到一个黑色的影子从台阶那边飘过来,又消失不见。

小枘坐在篮球架下,靠着柱子,昏昏欲睡

恍惚间她好像来到了一个巨大的糖葫芦下面,每一颗的颜色都不同,很好看,她闻了闻,最底下的果仁是核桃的,她顺着这个链往上爬,这个是草莓核的,这个是苹果核的...到顶了,只见js先生正在竹签顶旁,手里拿着一个null往上面插着。

R擦擦眼睛:这是你做的?

J神秘的:糖葫芦可不给爱哭的小孩吃,啊不,你都这么大了,应该是爱哭的妇女吃。

R恍然大悟:我知道了,这就是书上说的原型链!原来长这样,哈哈。

J:拜托,给你爸爸留一点尊严好吗,这里面道行不浅

R:刚才我只不过是从一个子类往父类做查询罢了,真正的继承就体现在这个“查”操作里

J:没错,是这样的,但是修改属性也很重要啊,你猜猜我会怎么看o.x=1这样的事?

R:嗯 首先要看有没有这个x属性,像我刚才那样找一下,如果没有,那就创建一个,这个是js的特点

J坏笑到:那要是有呢

R:有,那就有呗,赋值成功!。。啊 不不不,好像还有一种情况是只读属性,这时大概要赋值失败咯

J:嗯 不错 只不过。。

R:?

M:好吧 年轻人,告诉你吧,实际上还有一种属性存在的,而这个属性是一个具有setter方法的属性,那么子类对象。。

R:会调用setter方法!

J:嗯 孺子可教也 我们后面还会深入的看这种情况

 

R(有点不开心的):  今天我的事,你知道了?

J:哈哈 我就是你肚子里的梦 怎么会不知道?每个人都会犯错,何况是在家庭里的事,说不上谁对谁错。别想那些事了,没个结尾的。

R:哈哈 谁不犯错呢。

(突然想起来了什么):那我给你出一道题,如果访问属性出错了怎么办?

J:什么叫访问属性出错?

R:嗯 打个比方 我这样book.subtitle去访问一个属性,但实际上book没有这个属性,怎么办

J:这不能算错,我会返回一个undefined

R:那要是我继续质疑访问 book.subtitle.length呢

J:那就相当于访问undefined的属性,这就不行了,这样会报错呢。你快帮我想想,怎么样防止出现这样的情况!

R:不如这样 var len=book && book.subtitle && book.subtitle.length

J: 呦,写的挺高级,我还等着你写

if(book){

   if(book.subtitle){

       len=book.subtitle.length

}},然后顺其自然的嘲笑一下 :)

R: 骇,现在的年轻人,了解个&&很难么(666),这里我借用了它的短路行为呢

J(机智而得意的):哎呀 真棒棒呢 那小爷问你 我想要删除一个属性可怎么办呢

R(思考了一下没有结果,连忙偷偷百度):啊 删除 不就是delete关键字嘛 就这样delete book.author就好拉

J:哎呦 百出来了吗我的儿? 不如我们来做一个猜猜看的游戏~

R:啊 听起来就很无聊 好吧 放马过来

J:你猜我在设计语言的时候会不会让你“一删到底”?

比如

a={

p:{x:1}

}, 假设还有b=a.p, 现在我delete a.p,请问我回过头去访问b.x还有戏吗? 

R:嗯 你都这么问了 看来还是可以取到值的 (这真是一个考验情商的时刻),(不屑的)上面的栗子有点不严谨啊

J:哦? 你敢dis老师?说下去!

R:会造成内存泄漏嘛,没办法,以后要销毁对象的时候要遍历属性中的属性,依次删除咯

J(有点满意的):嗯额。好吧。那我再问你,如果换做是你,怎么处理继承属性的删除?

R:恩。。(换做是我?下辈子吧哥)刚才都是“分段式”的删除,这一次肯定不会好到哪里

J(小孩还算上道):嗯 差不多巴 也不是完全一样

R:?

J(秀一波专业术语的时间到了)delete运算符只能删除自自有属性,不能删除继承属性,

R:和我说的一个意思

J:要删除继承属性必须从定义这个属性的原型对象上删除它  (重点来了)而且这会影响到所有继承自这个原型的对象

R:哦 原来雷点在最后啊

R(生来挑衅的):但是仔细想想,那个delete怎么着也得有个返回值吧,是true还是false啊

J:看来你已经看出我打算让它返回一个boolean值咯

R:嗯哈 我都帮你想好了 比方说o={x:1};如果delete o.x,那么会成功的,那么就返回true,如果程序猿后面再delete o.x一次也不算错,就当是什么也不做,继续返回true。最后一种情况就是,(想到了刚学会的继承),因为o这种创建对象的方式会继承object属性toString,所以呢,呵呵,按照上面的规则,你尝试删除delete o.toString, 实际上还是什么也不做(刚才讨论了不删继承属性的问题),所以上述三种情况都返回true。

J:嗯 逻辑看似清楚。

R:看似?

J:有本事分析一下false的情况?

R:...不好说 我猜delete object.prototype 是不合适的 因为。。它的prototype属性可配置性为false

J:嗯 原则没错。某些内置对象的属性可配置性为false,比如变量声明和函数声明创建的全局对象的属性

R:啊 那不就是 var x=1 和 function f(){} 吗,也就是说我delete this.x 、delete this.f都会像deleteobject.prototype一样,返回false咯?

J:嗯 是滴

R(一颗躁动的心促使它又一次dis JS先生):哦 不过。。我看到this.x=1; delete x就返回true了啊?

J:呃(小屁孩),对啊,因为前面this.x是创建了一个可配置的全局属性呢,人家又没有用var。

R(too young too naive?no no no 继续dis):ok,那上次隔壁小王就是这么写的,为什么报出语法错误了呢?

J:(遇强则强的老姜头):噢 那是在严格模式下了,这时候就不能简写了,必须写delete this.x拉。

R(表示服气):说了这么多,我该回家了

J:年轻人 要多读书呢 (别一天到晚dis我)

R:拜拜啦(dis 你还不是因为喜欢你吗)

旁边:(土味情话完美收尾,小枘回到家,满脑子的访问属性、错误处理、删除属性,又想到今天的糖葫芦,开心的睡着了)

 

javascript 犀牛书 随笔(二)

标签:返回   遍历   运算符   必须   nbsp   外卖   als   sub   那些事   

原文地址:https://www.cnblogs.com/NinjaRose/p/9404220.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!