google closure--继承模块二:goog.base()demo分析
昨天已经讲到了goog.inherits(),主要负责通过为子构造函数原型对象通过原型链继承父构造函数的原型对象的方法,完成继承。这样继承只完成了原型对象的继承,看看之前的那张图:

是不是感觉父构造函数好像没什么用处啊,还记得上篇文章,构建一个超级对象的设想吗?这个要依赖另一个API,goog.base().
在看源代码之前让我们看看一个简单的demo,温习一下goog.inherit(),这个demo还可以帮助我们了解goog.base()可以做些什么。
demo代码:

输出结果:

分析:
先把goog.inherit()和goog.base()放在一边,让我们先分析一下这三个构造函数:A,B,C。
A:
构造函数:为new(构造)出来的新对象添加name属性,并取名周杰伦。
原型对象:添加details方法,并在控制台输出调用该方法的对象的name的老婆是昆凌。
(不排除有人使用call,apply等方法冒充周杰伦。。。)
B:
。
原型对象:添加details方法,并在控制台输出,调用该方法的对象的name属性的值的是一名歌手,年龄为该对象属性age的值。
这里有个疑问:该构造函数创建出来的对象是不足以执行其原型对象的方法,简而言之,如果我们用B构造函数创建一个对象,这个对象是没有name属性,如果后面不给该对象添加name属性,而去调用details的方法,在该对象中找不到name属性从而产生错误。
C:
构造函数:为new(构造)出来的新对象添加height属性,并复制为“173cm”。
原型对象:details方法,输出调用该方法的对象的妈妈是叶惠美,身高为该对象的height属性值。
这里与B相似,通过C构造函数构造出来的对象也是不足以满足其原型对象的details的方法,因为C构造出来的对象没有name属性。
然后让我们分析一下结果:

person对象是通过A构造函数构造出来的,但是存在下列疑惑:
1.Person对象为什么同时拥有,B构造函数,和C构造函数中为新对象添加的属性?
2.为什么调用Person对象的details方法的时候不仅执行了构造函数A原型对象的details方法,同时还执行了B和C的原型对象的同名方法?
这就是goog.base的威力。
goog.base()主要有2种使用情况:
1.在构造函数中使用,比如:

先看作用:
找到A继承的父构造函数B,并将当前作用域对象传入B构造函数,并调用。这就可以解释疑惑1中Person对象拥有B构造函数构建的age属性,同时B中又将A中的作用域对象(Person)传入并调用了其父构造函数C,所以person对象又有了height属性。
2.在构造函数原型对象的方法中使用,比如:

在这里,goog.base()的第二个参数是需要调用该原型对象constructor指向的构造函数继承的父构造函数的原型对象的方法名,所以这就很好的解释了疑惑2,为什么执行了B原型对象,同时在B中又调用goog.base()所以又执行了C原型对象的details方法。
这一章我们主要是,做了一个简单的demo,并分析了goog.base()的两个主要用途,及其效果,下面一章我们将着重分析goog.base()的源码。
google closure--继承模块二:goog.base()demo分析的更多相关文章
- google closure继承模块三:goog.base()源码分析
直接看代码吧: base: function (me, opt_methodName, var_args) { var caller = arguments.callee.caller; if (ca ...
- google closure--继承模块一:goog.inherits()
最近在项目是使用了google closure框架,深入研究了一下源码,先从最简单的继承系统吧. 废话不多说,closure继承模块主要有2个API: goog.inherits(childCtor, ...
- First Adventures in Google Closure -摘自网络
Contents Introduction Background Hello Closure World Dependency Management Making an AJAX call with ...
- Google Closure Compiler 高级模式及更多思考(转)
前言 Google Closure Compiler 是 Google Closure Tools 的一员,在 2009 年底被 Google 释出,早先,有 玉伯 的 Closure Compile ...
- 主流JavaScript框架(Dojo、Google Closure、jQuery、Prototype、Mootools和YUI)的分析和对比
本文主要选取了目前比较流行的JavaScript框架Dojo.Google Closure.jQuery.Prototype.Mootools和YUI进行对比,主要是根据网上的资料整理而成,希望可以供 ...
- Google Closure Compiler高级压缩混淆Javascript代码
一.背景 前端开发中,特别是移动端,Javascript代码压缩已经成为上线必备条件. 如今主流的Js代码压缩工具主要有: 1)Uglify http://lisperator.net/uglifyj ...
- JavaScript代码压缩工具UglifyJS和Google Closure Compiler的基本用法
网上搜索了,目前主流的Js代码压缩工具主要有Uglify.YUI Compressor.Google Closure Compiler,简单试用了UglifyJS 和Google Closure Co ...
- 使用Google Closure Compiler高级压缩Javascript代码注意的几个地方
介绍 GCC(Google Closure Compiler)是由谷歌发布的Js代码压缩编译工具.它可以做到分析Js的代码,移除不需要的代码(dead code),并且去重写它,最后再进行压缩. 三种 ...
- Google Developing for Android 二 - Memory 最佳实践 // lightSky‘Blog
Google Developing for Android 二 - Memory 最佳实践 | 分类于 Android最佳实践 原文:Developing for Android, II Th ...
随机推荐
- SPOJ 375 Query on a tree 树链剖分模板
第一次写树剖~ #include<iostream> #include<cstring> #include<cstdio> #define L(u) u<&l ...
- good design
canvas 效果麦当劳40周年纪念日 效果图 McDonald's 40th Anniversary 交互效果很流畅,赞!
- JS实现页面打印
[原文链接] 1.js实现(可实现局部打印) <input id="btnPrint" type="button" value="打印" ...
- Python之路 day3 高阶函数
#!/usr/bin/env python # -*- coding:utf-8 -*- #Author:ersa """ 变量可以指向函数,函数的参数能接收变量, 那么 ...
- centos6.5下安装qq2012
大家如果想在linux下用QQ的话,最好的方法就是用wine来安装.腾讯的QQ for linux用起来很坑爹. 下面就是我用wine在centOS下安装QQ.中间过程很简单. 一.安装Wine. 1 ...
- android APK更新
菜鸟的博客请多多指教 最近做了一个新功能,更新APK的功能 1.更新APK是一个耗时的任务,我采用了一个服务来做,上次在网上看到服务是在主线程里面,自己也测试了下,数据是真的 所以下载动作还必须在服务 ...
- 【转】Expire Google Drive Files 让Google Docs云盘共享连接在指定时间后自动失效
最近在清理Google Docs中之前共享过的文件链接,发现Google Docs多人协作共享过的链接会一直存在,在实际操作中较不灵活.正好订阅的RSS推送了Pseric写的这篇文章 - Expire ...
- chrome经常崩溃解决过程
之前chrome常崩溃,也没有找到原因,就将就着用吧,一直用到今天,今天连续几次崩了,突然想到,难道是因为我访问的域名没有解析(能想到这个,是因为今天分配公司域名测试的时候常输错),于是就输入一个不存 ...
- Could not load file or assembly or one of its dependencies. 试图加载格式不正确的程序。
当我把编译好的程序托管到IIS下后,访问时出现了以下问题,服务器环境是IIS 7,操作系统 Windows server 2008 r2 64位. 出现上述问题的原因是,所加载的程序集中有32位的,也 ...
- ios基础篇(二十三)—— 定时器NSTimer与图片的自动切换
一.NSTimer NSTimer是一个能在从现在开始到后面的某一个时刻或者周期性的执行我们指定的方法的对象.可以按照一定的时间间隔,将制定的信息发送给目标对象.并更新某个对象的行为.你可以选择在未来 ...