`

关于javascript的类抄写问题

阅读更多

所谓类抄写,就是将所构造的对象在生产出来之前,先到父类的构造工厂里面进行一次“洗礼“,以使得子类具有父类的性质。然后,对所要构造的对象进行个性化的定制。在个性化的过程中,可以对父类强加给自己的行为和属性进行重写。籍此来在javascript中实现“继承”的功能。

这种继承机制中存在的缺点:
1. 在这种继承机制中,子类可以保存父类的信息,但是子类无法保存祖父类的信息。
2. 子类对象无法通过instanceof运算来判断自己是否是派生自某个父类。
3. 子类可以访问父类的函数和属性(甚至是被子类重写过的),但是无法访问经过父类重写过的祖父类的属性和函数。
 
下面通过具体示例说明:
 
extend=function(subclass,baseclass){
    subclass.baseContructor = baseclass;
    subclass.base={};
    baseclass.call(subclass.base);
}
 
 
function Mouse(){};
 
function Animal(name){
    this.name=name;
    this.say=function(msg){
        console.log(this.name+": "+msg)
    }
    this.eat=function(){
        this.say("yum");
    }
}
 
 
function Cat(name){
    Cat.baseContructor.call(this,name);
    this.eat=function(food){
        if(food instanceof Mouse){
            Cat.base.eat.call(this);
        }
        else{
            this.say('yuk');
        }
    }
}
 
extend(Cat,Animal);
 
 
 
function Lion(name){
    Lion.baseContructor.call(this,name);
}
 
 
extend(Lion,Cat);
 
 
var cat = new Cat('Cat');
var mouse = new Mouse();
cat.eat(mouse);
var lion = new Lion('Lion');
lion.eat(mouse);
console.log(lion.name);
 
alert(cat instanceof Cat);
 
 
 
在上例中Lino显然无法访问到Animal类中的eat函数,而且也不知道Cat是其父类,而且(lion instanceof Cat)返回false。
分享到:
评论

相关推荐

    论文格式化系统-前台的设计与实现

    该系统是一个基于web的软件。该系统的客户端采用javascript和php作为平台的开发语言,...在人们繁忙的工作环境中,很多资料文件都要形成规范化的文档便于分类和存放,信息化的社会已经将以前手工抄写文档全部用电脑办公

    [转]去百度面试的javascript 收获

    在js里类的继承一般是类抄写和原型继承混合使用,在extjs的extend里就是这两种方式混合 但考官问我,这样不是也在子类里加入了对父类函数的引用吗,(会在子类里加上superClass属性)这不是也是污染吗,怎么做更好的...

    Jekyll-furigana:无需插件或JavaScript的GitHub Pages兼容转录模板(furigana)

    无需插件或JavaScript的GitHub Pages兼容转录模板(furigana)。 用法 从下载furigana.html文件。 将文件移到_includes文件夹。 像下面的代码一样,使用以下模板: {% include furigana . html text= "测试" ...

    scribe-platform-osx:构建运行 Javascript 文件并实现 Scribe API 的模板 Mac OS X 应用程序

    抄写平台-osx scribe-platform-osx模块包含一个模板 Mac OS X 应用程序,该应用程序运行 Javascript 文件并提供标准的窗口和菜单 API 以及允许描述和调用本机库的 Objective-C 和 C 桥接器。 设置 依赖项作为 git ...

    dedalo_publication_templates:使用纯JavaScript的口述历史的基本Dédalo发布模板的教学示例

    当前存储库的目的是允许访问基于Dédalo发布系统的非常简单的网站示例,并说明DédaloAPI REST的用法以及如何发出请求并管理原始javascript中的记录。 并不打算提供生产文件,它们只是记住您易于学习的功能样本。 ...

    抄写前端

    有关更多信息,请参见关于的部分。 yarn build 构建生产到应用程序build文件夹。 它在生产模式下正确捆绑了React,并优化了构建以获得最佳性能。 最小化构建,文件名包含哈希。 您的应用已准备好进行部署! 有关...

    Sarah.Scribe:莎拉抄写员插件

    插件:SCRIBE Scribe插件(用于Sarah)使您可以通过Google Chrome... Scribe插件提供了使用Google公认的短语的功能,以便在第三方插件中利用Google。...独立并且完全是实验性的),并通过对笑脸形成的小脸进行动画处理.

    chess-sheet:使棋盘的抄写更快,更轻松

    棋盘 演示版 目标 该应用程序的目标是使国际象棋棋盘的转录更快,更容易。 特征 接受标准表示法和不区分大小写的捷克语表示法中的移动 可视化棋盘上的最后一个位置 将输入转换为PGN表示法 突出无效的举动 ...

    scrawl.js:JSON-LD社区组使用的抄写工具

    Scrawl.js W3C小组划线员的便捷划线员工具。 安装 在本地克隆存储库,然后在此存储库工作目录中运行以下命令: $ npm i $ npm start 设置 抓取适用于结构如下的目录: 2011-07-04/ ./irc.log ...

    JS实现移动端在线签协议功能

    在一个风和日丽的下午,刚准备下班,突然接到需求说要做一个在线签协议功能,当时心里想着不就百度一顿拷贝就...最后的思路:一行可以写很多个字,可以让用户滑动canvas,一直写下去(因为协议模板最后还要抄写一段话)

    zipkin-middleware:用于快递应用的 Zipkin 中间件

    '抄写主机' 运行 scribe 守护进程的主机 'localhost' '抄写端口' scribe 守护进程监听的端口 1463 '抄写类别' 将 Zipkin 跟踪发送到的类别名称 'zipkin' '服务名称' 用于在 Zipkin 跟踪中识别它的服务名称 '...

    dedalo-publication-templates:口述历史的基本Dédalo发布模板的教学示例

    Dédalo发布模板口述历史的基本Dédalo发布模板的教学示例当前存储库的目的是允许访问基于Dédalo发布系统的非常简单的网站示例,并说明DédaloAPI REST的用法以及如何发出请求并管理原始javascript中的记录。...

    WebScrapper for developers - Free - Remotal-crx插件

    构建您的刮板以废除任何网站(对于JavaScript开发人员)。你可以: - 废除无限数量的页面 - 导出和进口项目 - 浏览页面导航列表(适用于:Ajax刷新,页面重新加载和部分重新加载) - 处理CAPTCHA或2 Factor或需要...

    scribe-vibe:用CodeSandbox创建

    抄写器 用CodeSandbox创建

    谜题:加密或加密消息

    谜 加密或抄写邮件

    转录:打开活页乐谱转录档案

    抄写 打开活页乐谱的存档

    scribeline:优雅的在线笔记应用程序

    抄写员 Scribeline是一个开放源代码的笔记网络应用程序。 ###依赖关系: Node.js MongoDB的 可选:全局nodemon ( sudo npm -g install nodemon ) npm依赖 ###开始抄写员 克隆回购: git clone ...

    secure-secret:模块,以使用nodejs帮助保护文件安全

    “ param3”:0表示|| 1要抄写(必填) “ param4”:要加密或要加密的filname(路径)(必填) “ param5”:输出记录的filname(路径)(可选)| 达福(Dafault):“秘密” 结帐密码类以获取帮助 密码算法 AES...

    程序员面试刷题的书哪个好-awesome-stars::dizzy:精选我的GitHub星星列表

    抄写员 91 CSS 名称 描述 作者 星星 1 下一步 108 2 渐进式网络应用程序和移动与网络技术 约书亚1988 24 3 :blue_book: 리디 주식회사의 홈페이지입니다。 里迪 43 4 钠多627 1 文件 名称 描述 作者 星星 1 从 ...

    CodeNotebook::notebook_with_decorative_cover:自用代码指南

    照着书籍抄写的笔记。 自己写的一些小工具和脚本。 版权: 摘自网络的内容,最下面会有原地址链接,版权原作者所有。 部分可能因为疏忽没有标记作者和来源,原作者可以联系我补充版权信息或可移除内容。 关于雅诗写...

Global site tag (gtag.js) - Google Analytics