js深入研究之无法理解的js类代码,extend扩展
- <script type="text/javascript">
- function Person(name) {
- this.name = name;
- }
- Person.prototype.getName = function() {
- return this.name;
- }
- function Author(name, books) {
- Person.call(this, name); // 定义:调用一个对象的一个方法,以另一个对象替换当前对象。
- this.books = books; // Add an attribute to Author.
- }
- Author.prototype = new Person(); // 设置原型链
- Author.prototype.constructor = Author; // 设置构造属性
- Author.prototype.getBooks = function() { // 添加方法
- return this.books;
- };
- var author = [];
- author[] = new Author('Dustin Diaz', ['JavaScript Design Patterns']);
- author[] = new Author('Ross Harmes', ['JavaScript Design Patterns']);
- alert(author[].getName()); //输出 Dustin Diaz
- alert(author[].getBooks()); //输出 JavaScript Design Patterns
- alert(author[].getName()); //输出 Ross Harmes
- alert(author[].getBooks()); //输出 JavaScript Design Patterns
- </script>
功力不够,无法理解
进一步升级提取
- <script type="text/javascript">
- /* 扩展函数 */
- function extend(subClass, superClass) {
- var F = function() {};
- F.prototype = superClass.prototype; // F已成superClass父类
- subClass.prototype = new F(); //子类继承父类的原子
- subClass.prototype.constructor = subClass;
- }
- /* Person类 */
- function Person(name) {
- this.name = name;
- }
- Person.prototype.getName = function() {
- return this.name;
- }
- /* Author类 */
- function Author(name, books) {
- Person.call(this, name);
- this.books = books;
- }
- extend(Author, Person);
- Author.prototype.getBooks = function() {
- return this.books;
- };
- var author = []; //定义数组
- author[] = new Author('Dustin Diaz', ['JavaScript Design Patterns']);
- author[] = new Author('Ross Harmes', ['JavaScript Design Patterns']);
- alert(author[].getName()); //输出 Dustin Diaz
- alert(author[].getBooks()); //输出 JavaScript Design Patterns
- alert(author[].getName()); //输出 Ross Harmes
- alert(author[].getBooks()); //输出 JavaScript Design Patterns
- </script>
进一步改进,太牛逼了,作者
- <script type="text/javascript">
- /* 扩展函数 */
- function extend(subClass, superClass) {
- var F = function() {};
- F.prototype = superClass.prototype;
- subClass.prototype = new F();
- subClass.prototype.constructor = subClass;
- subClass.superclass = superClass.prototype;
- if(superClass.prototype.constructor == Object.prototype.constructor) {
- superClass.prototype.constructor = superClass;
- }
- }
- /* Person类 */
- function Person(name) {
- this.name = name;
- }
- Person.prototype.getName = function() {
- return this.name;
- }
- /* Author类 */
- function Author(name, books) {
- Author.superclass.constructor.call(this, name);
- this.books = books;
- }
- extend(Author, Person);
- Author.prototype.getBooks = function() {
- return this.books;
- };
- Author.prototype.getName = function() {
- var name = Author.superclass.getName.call(this);
- return name + ', Author of ' + this.getBooks().join(', ');
- };
- var author = []; //定义数组
- author[] = new Author('Dustin Diaz', ['JavaScript Design Patterns']);
- author[] = new Author('Ross Harmes', ['JavaScript Design Patterns']);
- alert(author[].getName()); //输出 Dustin Diaz , Author of JavaScript Design Patterns
- alert(author[].getBooks()); //输出 JavaScript Design Patterns
- alert(author[].getName()); //输出 Ross Harmes , Author of JavaScript Design Patterns
- alert(author[].getBooks()); //输出 JavaScript Design Patterns
- </script>
js深入研究之无法理解的js类代码,extend扩展的更多相关文章
- js深入研究之神奇的匿名函数类生成方式
<script type="text/javascript"> var Book = (function() { // 私有静态属性 ; // 私有静态方法 funct ...
- 深入理解unslider.js源码
最近用到了一个挺好用的幻灯片插件,叫做unslider.js,就想看看怎么实现幻灯片功能,就看看源码,顺便自己也学习学习.看完之后收获很多,这里和大家分享一下. unslider.js 源码和使用教程 ...
- Js 职责链模式 简单理解
js 职责链模式 的简单理解.大叔的代码太高深了,不好理解. function Handler(s) { this.successor = s || null; this.handle = funct ...
- JS魔法堂:彻底理解0.1 + 0.2 === 0.30000000000000004的背后
Brief 一天有个朋友问我“JS中计算0.7 * 180怎么会等于125.99999999998,坑也太多了吧!”那时我猜测是二进制表示数值时发生round-off error所导致,但并不清楚具体 ...
- 关于闭包的理解(JS学习小结)
前言: 啊啊啊,看书真的很痛苦啊,还是好想做项目写代码才有意思,不过我现在缺的确是将知识体系化,所以不论看书多么痛苦都一定要坚持坚持啊,这才是我现在最需要的进步的地方,加油! 因为现在期末啦,下周一也 ...
- 封装常用的js(Base.js)——【01】理解库,获取节点,连缀,
封装常用的js(Base.js)——[01]理解库,获取节点,连缀, youjobit07 2014-10-10 15:32:59 前言: 现如今有太多优秀的开源javascript库, ...
- 关于js with语句的一些理解
关于js with语句的一些理解 今天看到js的with语句部分,书中写到,with语句接收的对象会添加到作用域链的前端并在代码执行完之后移除.看到这里,我有两点疑问,添加到作用域链前端是不是指对 ...
- 【翻译】要理解Ext JS 5小工具
原版的:Understanding Widgets in Ext JS 5 在Ext JS 5,引入了新的"widgetcolumn",支持在网格的单元格中放置组件. 同一时候,还 ...
- 理解Node.js的事件轮询
前言 总括 : 原文地址:理解Node.js的事件轮询 Node小应用:Node-sample 智者阅读群书,亦阅历人生 正文 Node.js的两个基本概念 Node.js的第一个基本概念就是I/O操 ...
随机推荐
- php PDO操作乱码问题
前阶段用php写了一个小网页(每周一练),然后就一直忙着其他事也没管它,今天想着给它写个添加数据的页面,用pdo操作,没想到插入数据库的中文数据竟然乱码了,竟然乱码了!然后我就方了,赶紧检测数据传输过 ...
- win7配置简单的FTP服务器
1.开启一些win7默认是关闭状态的功能 步骤:控制面板 -> 程序和功能 -> 打开或关闭Windows功能,然后勾选下图中圈起来的部分: 2.添加FTP站点 步骤:桌面的计算机图标 - ...
- springMVC学习(1)
spring mvc的位置: springMVC只是spring的一个模块: 第一步:发起请求到前端控制器(DispatcherServlet) 第二步:DispatcherServlet请求Ha ...
- 重写boost内存池
最近在写游戏服务器网络模块的时候,需要用到内存池.大量玩家通过tcp连接到服务器,通过大量的消息包与服务器进行交互.因此要给每个tcp分配收发两块缓冲区.那么这缓冲区多大呢?通常游戏操作的消息包都很小 ...
- mongodb授权登录
mongodb版本为3.2(目前最新),演示的是linux下的mongodb授权认证 第一次登录不启动授权(mongo默认不启动) ./mongod --dbpath=/home/db/data -- ...
- [原创作品] web项目构建(一)
今天开始,将推出web项目构建教程,与<javascript精髓整理篇>一并更新.敬请关注. 这篇作为这一系列开头,主要讲述web项目的构建技术大全.在众多人看来,web前端开发无非就是写 ...
- Windows下Hadoop的环境安装[转]
1.下载并安装Cygwin,记得cygwin安装中要把SSH选择上,因为后面Hadoop会用到,不详述cygwin的安装过程.我是安装在D:\cygwin下 2.配置系统环境变量 在windows命令 ...
- ViewController详解
一.生命周期 当一个视图控制器被创建,并在屏幕上显示的时候. 代码的执行顺序1. alloc 创建对象,分配空间2.init (initWit ...
- i春秋30强挑战赛pwn解题过程
80pts: 栈溢出,gdb调试发现发送29控制eip,nx:disabled,所以布置好shellcode后getshell from pwn import * #p=process('./tc1' ...
- linux系统自动执行任务(转)
开机启动 开机启动应该是我们很经常的需求了,我们常需要在开机时就自动执行某些命令来开启服务,进程等,有了它我们不必再在每次开机时输入同一堆命令. chkconfig命令 使用chkconfig命令可以 ...