【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=['我可以 ...
随机推荐
- Android获取TextView显示的字符串宽度
工作上有业务需要判断textview是否换行,我的做法是判断textview要显示的字符串的宽度是否超过我设定的宽度,若超过则会执行换行. 项目中的其他地方也有这样的需求,故直接使用了那一块的代码.如 ...
- Android使用BLE(低功耗蓝牙,Bluetooth Low Energy)
背景 在学习BLE的过程中,积累了一些心得的DEMO,放到Github,形成本文.感兴趣的同学可以下载到源代码. github: https://github.com/vir56k/bluetooth ...
- Spark源码系列(四)图解作业生命周期
这一章我们探索了Spark作业的运行过程,但是没把整个过程描绘出来,好,跟着我走吧,let you know! 我们先回顾一下这个图,Driver Program是我们写的那个程序,它的核心是Spar ...
- 如何使用新浪微博账户进行应用登录验证(基于Windows Azure Mobile Service 集成登录验证)
使用三方账号登录应用应该对大家来说已经不是什么新鲜事儿了,但是今天为什么还要在这里跟大家聊这个话题呢,原因很简单 Windows Azure Mobiles Service Authenticatio ...
- java之对象转型
对象转型(casting) 1.一个基类的引用类型变量可以“指向”其子类的对象. 2.一个基类的引用不可以访问其子类对象新增加的成员(属性和方法). 3.可以使用 引用变量 instanceof 类名 ...
- Socket模型详解(转)
两种I/O模式 一.选择模型 二.异步选择 三.事件选择 四.重叠I/O模型 五.完成端口模型 五种I/O模型的比较 两种I/O模式 1. 两种I/O模式 阻塞模式:执行I/O操作完成前会一直进行等待 ...
- CentOS 7 上编译安装MySQL 5.6.23
1.下载源码 wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.23.tar.gz 2.解压 tar zxvf mysql-5.6 ...
- 【Android学习】数据传递三种方式
1.Application 注意在清单文件中的Application节点下注册android:name属性, 继承Application类,重写onCreate方法, 使用数据时,实例化自定义类时需要 ...
- JavaScript Scoping and Hoisting
JavaScript中所有变量及函数名会自动提升 http://www.cnblogs.com/betarabbit/archive/2012/01/28/2330446.html
- Ubuntu 12.10
上海交通大学更新服务器(教育网千兆接入,联通/电信线路情况不详),包含其他开源镜像: deb http://ftp.sjtu.edu.cn/ubuntu/ quantal main multivers ...