【JS复习笔记】03 继承
关于继承
好吧,说到底JS还是原型继承的,而不是类继承。所以在这个上面要经常用到prototype去继承另一个对象。
所有的构造器函数都约定命名为首字母大写的形式,并且不以首字母大写的形式拼写任何其它的东西。当然一个更好的备选方案是根本就不用new。(太棒了,你说什么就是什么咯,我就当JS没这个东西了)
为什么呢,因为伪类模式就是一种画虎不成反类犬的模式,它试图去迎合我们这些玩类继承的程序员,但是其实它还有更多更好的选择。
那就是原型继承,然后创建对象的时候函数化,这样就可以对创建有私有变量的对象。
以下为构造器的例子:
var ObjectFactory=function(spec,my){//spec是一个传递的信息对象,其实按照我的理解这个东西就是跟闭包类似不是吗,没什么新鲜的东西 var that;//要返回的对象 var name='troy';//私有变量 my =my||{};//构造时传进来的对象 my.getName=function(){//将公共方法和属性可以传递给my return name; } that={}; that.GetMyName=function(){//这是要创建的对象有的特有方法 return 'myname:'+name; } return that; }; var boy=ObjectFactory(1,anotherObj);
事实上上面的代码中that.GetMyName更适合先建一个私有函数对象,然后再赋值给that.GetMyName,这样的话这个方法GetMyName在被删除或者替换后,私有方法不会被破坏。
函数化同样提供了一个访问父类的方法:
Object.AddMethod("getMyParent",function(funcName){ var that=this,method=that[funcName]; return function(){ return method.apply(that,arguments); }; })
通过以上方式我们就可以用getMyParent来调用父类的函数。
实际上我感觉
obj.getMyParent("getMyName")和obj.getMyName()的调用方式好像没什么区别,话说这里我也没搞懂什么意思。如有懂的人请麻烦指正一下,谢谢。
部件的组装可以从一套部件中将对象组装起来,简单来讲就是对一个复杂对象进行组装。感觉有点像建造者模式。
【JS复习笔记】03 继承的更多相关文章
- JS自学笔记03
JS自学笔记03 1.函数练习: 如果函数所需参数为数组,在声明和定义时按照普通变量名书写参数列表,在编写函数体内容时体现其为一个数组即可,再传参时可以直接将具体的数组传进去 即 var max=ge ...
- 【JS复习笔记】03 继承(从ES5到ES6)
前言 很久以前学习<Javascript语言精粹>时,写过一个关于js的系列学习笔记. 最近又跟别人讲什么原型和继承什么的,发现这些记忆有些模糊了,然后回头看自己这篇文章,觉得几年前的学习 ...
- 【JS复习笔记】07 复习感想
好吧,其实<JavaScript语言精粹>后面还简单介绍了代码风格,优美特性,以及包含的毒瘤.糟粕. 但我很快就看完了,发现其实都在前面讲过了,所以就不写了. 至今为止已经算是把JavaS ...
- 【JS复习笔记】02 对象与函数
好吧,因为很重要的事情,几天没写笔记了. 关于对象: ||可以用来填充默认值,如:myApp.name || "无" &&可以用来避免错误,myApp.NameOb ...
- 【JS复习笔记】00 序
作为一个前端苦手,说是复习,你就当我是重学好了. 好吧,我当然不可能抱着一个砖头去复习,所以捡了本薄的来读——<JavaScript语言精粹>. 当初带我的人说这本书挺好,就看这本书好了. ...
- JavaScript语言精粹 笔记03 继承
继承伪类对象说明符原型函数化部件 继承 JS不是基于类的,而是基于原型的,这意味着对象直接从其他对象继承. 1 伪类 JS提供了一套丰富的代码重用模式,它可以模拟那些基于类的模式,因为JS实际上没有类 ...
- Servlet&JSP复习笔记 03
1.Servlet的声明周期 容器如何创建Servlet对象,如何为Servlet对象分配资源,如何调用Servlet对象的方法来处理请求,以及如何销毁Servlet对象的过程. a.实例化 容器调用 ...
- 【JS复习笔记】05 正则表达式
好吧,正则表达式,我从来没记过.以前要用的时候都是网上Copy一下的. 这里还是扯一下吧,以后要是有要用到的正则表达式那么就收集到这个帖子里.(尽管我认为不会,因为我根本就不是一个专业的前端,我只是来 ...
- 【JS复习笔记】04 数组
JS里的数组其实并不是一个数组,它其实是一个对象,a[1]这种调用方式其实就是一个字面量为1的属性. 因为这东西实际上是一个对象,所以你就可以理解下面这种声明了吧! var arrName=['我可以 ...
随机推荐
- FEC难:
飞雨(314698641) 12:03:16 有人研究fec吗把信源编码好信道编码区别开来 ? 杭州桓泽(84894922) 12:52:54fec实际是一种概括性技术可以从信源的方面做fec就 ...
- Mac 安装终端软件
1.安装或者重新安装lua环境 下载 lua 地址: http://www.lua.org/versions.html 1.进入 lua 目录 2.make macosx 3.sudo make in ...
- 分享一个web应用程序池管理工具
因为项目在联调阶段由于各种各样的原因需要重启应用程序池,而调试服务器基本都需要远登操作.同样的情况也会发生在线上,如果公司权限控制得比较严格,每次都要多部门的服务器权限申请的话有点麻烦, 所以抽点时间 ...
- iOS开发——项目实战总结&经典错误一
经典错误一 No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=armv7, VA 运行报错 出现的原因:armv7s ...
- C# 用代码创建 DataSet 和 DataTable 的列和记录
System.Data.DataSet objSet = new DataSet(); System.Data.DataTable objTable = new DataTable("tes ...
- 11款样式新颖的 jQuery/CSS3 网页菜单
今天为大家准备了11款样式风格挺不错的jQuery/CSS3网页菜单,主要包括面包屑菜单.下拉菜单.Tab菜单等,喜欢的朋友赶紧收藏,一起来看看这些菜单. 1.jQuery / CSS3多功能下拉菜单 ...
- pdf嵌入字体
论文提交时,要求所有的字体都是嵌入的,为这个问题折腾了很久,发现了一个很好的答案,记一下: http://stackoverflow.com/questions/4231656/how-do-i-em ...
- 在自己的框架中引用 PHPExcel
如果直接在框架中的controller中直接引用 xxxx/PHPExcel.php,由于框架中有autoload 与PHPExcel的autoload冲突(加载目录原因), 那么在不想做太多修改的情 ...
- 【cs229-Lecture16】马尔可夫决策过程
之前讲了监督学习和无监督学习,今天主要讲“强化学习”. 马尔科夫决策过程:Markov Decision Process(MDP) 价值函数:value function 值迭代:value iter ...
- SmartJS 系列规划分享和背景介绍
发布了smartjs后,有朋友问:“没看懂究竟是干嘛的”.唉,打击了,每次我都想高唱其实你不懂我的心. 今天把相关的东西都整理了一遍,给大家介绍一下.里面绝大多数都已经实现过,有些则是有新的思路重做或 ...