昨天已经讲到了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分析的更多相关文章

  1. google closure继承模块三:goog.base()源码分析

    直接看代码吧: base: function (me, opt_methodName, var_args) { var caller = arguments.callee.caller; if (ca ...

  2. google closure--继承模块一:goog.inherits()

    最近在项目是使用了google closure框架,深入研究了一下源码,先从最简单的继承系统吧. 废话不多说,closure继承模块主要有2个API: goog.inherits(childCtor, ...

  3. First Adventures in Google Closure -摘自网络

    Contents Introduction Background Hello Closure World Dependency Management Making an AJAX call with ...

  4. Google Closure Compiler 高级模式及更多思考(转)

    前言 Google Closure Compiler 是 Google Closure Tools 的一员,在 2009 年底被 Google 释出,早先,有 玉伯 的 Closure Compile ...

  5. 主流JavaScript框架(Dojo、Google Closure、jQuery、Prototype、Mootools和YUI)的分析和对比

    本文主要选取了目前比较流行的JavaScript框架Dojo.Google Closure.jQuery.Prototype.Mootools和YUI进行对比,主要是根据网上的资料整理而成,希望可以供 ...

  6. Google Closure Compiler高级压缩混淆Javascript代码

    一.背景 前端开发中,特别是移动端,Javascript代码压缩已经成为上线必备条件. 如今主流的Js代码压缩工具主要有: 1)Uglify http://lisperator.net/uglifyj ...

  7. JavaScript代码压缩工具UglifyJS和Google Closure Compiler的基本用法

    网上搜索了,目前主流的Js代码压缩工具主要有Uglify.YUI Compressor.Google Closure Compiler,简单试用了UglifyJS 和Google Closure Co ...

  8. 使用Google Closure Compiler高级压缩Javascript代码注意的几个地方

    介绍 GCC(Google Closure Compiler)是由谷歌发布的Js代码压缩编译工具.它可以做到分析Js的代码,移除不需要的代码(dead code),并且去重写它,最后再进行压缩. 三种 ...

  9. Google Developing for Android 二 - Memory 最佳实践 // lightSky‘Blog

    Google Developing for Android 二 - Memory 最佳实践   |   分类于 Android最佳实践 原文:Developing for Android, II Th ...

随机推荐

  1. Virtualbox中不能为虚拟机打开一个新任务的原因及解决方法

    VirtualBox新建虚拟机时报错,不能为虚拟机打开一个新任务的原因 解决办法如下 1.保证bios里的virtualization technology的选项开启,不同电脑BIOS设置可能会不一样 ...

  2. public protect private. 草稿。

    public protect private. 草稿. #include <iostream> #include <thread> #include <memory> ...

  3. spring+task配置

    1.spring+task文件配置 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=& ...

  4. easyx与VS2015

    7.10 之前在文件头将__acrt_iob_func重定义&__iob_func,在格子涂色的程序中解决了问题:然而在俄罗斯方块的程序中出现了更多的问题,好像是FILE在其他外部依赖项cor ...

  5. 利用eclips创建一个maven项目

    最近在写新项目,由于以前没有用过Maven,所以在创建Maven 项目的过程中遇到了很多问题...现在将整个创建过程给记录下来,方便查看 创建maven项目 创建完成项目后配置maven项目 修改we ...

  6. ps中的位图,矢量图,颜色模式

    什么是位图?什么是矢量图? 位图是由像素组成的图像,在缩放和旋转的时候容易失真,同时文件容量较大 矢量图是根据几何特性来绘制的图形,通过数学公式计算获得的,不易制作色彩变化太多的图象 颜色模式 RGB ...

  7. express+gulp构建项目(二)启动项目和主文件

    这一次整理的内容是项目主文件和如何启动项目. 启动项目 通过nodejs官网的例子https://nodejs.org/docs/latest-v4.x/doc/api/synopsis.html我们 ...

  8. 不在折腾---hbase-0.96.2-hadoop2

    首先安装好zookeeper集群 上传hbase安装包 解压 配置hbase集群,要修改3个文件 * 修改hbase-env.sh 设置JAVA_HOME: export JAVA_HOME=... ...

  9. MySQL学习记录--分组与聚集

    一.group by 子句 group by 字句可对数据进行分组. 以MySQL5.5的sakila数据库中的film数据表举例:查找出各个电影等级的电影总数 mysql>SELECT rat ...

  10. 将windows上的文件同步到linux上

    1.首先下载PSCP.exe,下载地址:http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html 2.将PSCP.exe拷贝到C: ...