前两天在网上无意中发现了一篇使用极简主义法定义JavaScript类的文章,原文链接,这个所谓的"极简主义法"我还是第一次听说,是荷兰程序员Gabor de Mooij提出来的,这种方法不使用this和prototype,代码部署起来非常简单,这大概也是它被叫做"极简主义法"的原因。下面就介绍如何使用极简主义法完成JavaScript的封装和继承

1. 封装

  首先,它也是用一个对象模拟"类"。在这个类里面,定义一个构造函数createNew(),用来生成实例。

1 var Cat = {
2     createNew: function(){
3       // some code here
4     }
5 };

  然后,在createNew()里面,定义一个实例对象,把这个实例对象作为返回值。

1 var Cat = {
2     createNew: function(){
3       var cat = {};
4       cat.name = "大毛";
5       cat.makeSound = function(){ alert("喵喵喵"); };
6       return cat;
7     }
8 };

  使用的时候,调用createNew()方法,就可以得到实例对象。

1 var cat1 = Cat.createNew();
2 cat1.makeSound(); // 喵喵喵

  这种方法的好处是,容易理解,结构清晰优雅,符合传统的"面向对象编程"的构造,因此可以方便地部署下面的特性。

2. 继承

  让一个类继承另一个类,实现起来很方便。只要在前者的createNew()方法中,调用后者的createNew()方法即可。

  先定义一个Animal类:

1 var Animal = {
2     createNew: function(){
3       var animal = {};
4       animal.sleep = function(){ alert("睡懒觉"); };
5       return animal;
6     }
7 };

  然后,在Cat的createNew()方法中,调用Animal的createNew()方法

1 var Cat = {
2     createNew: function(){
3       var cat = Animal.createNew();
4       cat.name = "大毛";
5       cat.makeSound = function(){ alert("喵喵喵"); };
6       return cat;
7     }
8 };

  这样得到的Cat实例,就会继承Animal类。

1 var cat1 = Cat.createNew();
2 cat1.sleep(); // 睡懒觉

3. 私有属性和私有方法

  在createNew()方法中,只要不是定义在cat对象上的方法和属性,都是私有的。

 1 var Cat = {
 2     createNew: function(){
 3       var cat = {};
 4       var sound = "喵喵喵";//私有属性
 5       cat.makeSound = function(){
 6                     alert(sound);
 7                 };
 8       return cat;
 9     }
10 };    

  上例的内部变量sound,外部无法读取,只有通过cat的公有方法makeSound()来读取。

1 var cat1 = Cat.createNew();
2 alert(cat1.sound); // undefined

4. 数据共享

  有时候,我们需要所有实例对象,能够读写同一项内部数据。这个时候,只要把这个内部数据,封装在类对象的里面、createNew()方法的外面即可。

1 var Cat = {
2     sound : "喵喵喵",
3     createNew: function(){
4       var cat = {};
5       cat.makeSound = function(){ alert(Cat.sound); };
6       cat.changeSound = function(x){ Cat.sound = x; };
7       return cat;
8     }
9 };

  然后,生成两个实例对象:

1 var cat1 = Cat.createNew();
2 var cat2 = Cat.createNew();
3 cat1.makeSound(); // 喵喵喵

这时,如果有一个实例对象,修改了共享的数据,另一个实例对象也会受到影响。

1 cat2.changeSound("啦啦啦");
2 cat1.makeSound(); // 啦啦啦

  极简主义,看起来很美好,但是也有缺点,首先是不能使用instanceof 判断对象所属的类,"cat1 instanceof Cat"无法通过,另外,极简主义虽然摆脱了使用原型链的缺点(属性不能私有、创建、继承对象不够直观),但也暴露了没用原型链的弊端:每一次生成一个实例,都必须为重复的内容,多占用一些内存。

JavaScript学习总结(十三)——极简主义法编写JavaScript类相关推荐

  1. VanillaNet:深度学习极简主义的力量

    摘要 基础模型的核心是"更多不同"的理念,计算机视觉和自然语言处理方面的出色表现就是例证.然而,Transformer模型的优化和固有复杂性的挑战要求范式向简单性转变.在本文中,我 ...

  2. CherryPy: 一个极简主义Python Web框架

    目录 1 前言 2 SWGI(Web Server Gateway Interface) 3 特色与优势 4 Hello, World! 5 不同URL调用不同函数 6 带有参数的URL 7 处理表单 ...

  3. 18个最新的极简主义风格网站

    极简主义的设计之所以总是流行,是因为他们一直用一些很简单的创意和资源去表达概念,网页设计的领域受极简主义设计的影响很大,许多有才华的设计师总是用几个简单的工具就设计出了不起的网站,比如字体和几何图形等 ...

  4. 什么叫做罗列式_极简罗列法怎么写作文

    极简罗列法怎么写作文以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 1. 作文罗列式怎么开头 列举式 案例一:" ...

  5. 极简主义APP界面UI设计实例模板,不简单!

    UI设计是对用户软件使用环境的设计.由于APPUI设计必须遵从易用性的特点,尤其是手机界面尺寸有限.因此,简洁大方的交互界面设计才能更容易的吸引用户.引导用户. RentHouse - 简单主页搜索移 ...

  6. 【Rust日报】2022-07-20 极简主义 Poem 指南

    极简主义 Poem 指南 Poem 是一个用 Rust 编写的 Web 框架.它提供了简洁的 API,并且功能丰富,超出了您通常在微框架中找到的功能.它可以将自身与 Web 框架的许多主要功能解耦,从 ...

  7. 原子性 可见性 有序性_极简主义的内容可见性

    原子性 可见性 有序性 A couple of years ago, Minimalism as a concept took over the design world. 几年前, 极简主义作为一种 ...

  8. “留白” 与 极简主义

    "留白" 设计,是 极简主义设计 外化后的的重要体现 留白在世界 ------------------------- 1939年9月,以德国 / 意大利 / 日本  为首的轴心国悍 ...

  9. 极简主义的思想内核-奥卡姆剃刀原则

    在去年的跨年演讲里,罗胖曾讲过一个"奥卡姆剃刀"原则,当时只觉得新奇,倒没有去仔细研究,直到昨天在一篇文章里又看到这个名词,说的神乎其神,比如下面这段描述: "这把剃刀出 ...

最新文章

  1. load python txt文件_详解Python中numpy.loadtxt()读取txt文件
  2. 对计算机应用的认识100,计算机应用基础
  3. [AWDwR4] Iteration F4
  4. jquery getJSON 中对超时Timeout的处理
  5. 浅谈HASH算法与CSDN密码泄漏事件
  6. 长春理工大学第十四届程序设计竞赛
  7. @ResponseBody,@RequestBody,@PathVariable
  8. html怎么实现多语言图片切换,JavaScript实现--中英语言切换功能
  9. Http GET、Post方式的请求总结
  10. org.apache.ibatis.builder.BuilderException: An invalid property ‘jdbcType ‘ was found in mapping
  11. 第八章节 文件操作一 (文件夹常用操作)
  12. Android sendEmptyMessage(0)里面的“0”是啥意思?
  13. 推荐几个无版权的免费图片网站
  14. 起风了用计算机按,用计算机弹起风了要点那些键
  15. 西雅图大学计算机专业,本科计算机专业伊力诺依香槟分校,华盛顿西雅图大学,德州奥斯汀哪个好??...
  16. PC机装Openwrt19.07做BT下载机的详细配置
  17. matlab定义struck,Peter Struck
  18. PAT A1008 Elevator (20 分)
  19. PT 系列 00·小谈 pt-kill
  20. c语言统计宿舍 信息,学生宿舍管理系统C语言.doc

热门文章

  1. sizeof和strlen的区别
  2. 2016级算法第一次练习赛-E.AlvinZH的儿时回忆——蛙声一片
  3. 调集群,我的姿势不对,好累!
  4. 注入技术--消息hook注入
  5. Java基础知识:IO
  6. java 中变量的存储与引用
  7. 并发模型之——基本概念
  8. 【转】C++11 并发指南五(std::condition_variable 详解)
  9. HDU 5119 Happy Matt Friends(DP || 高斯消元)
  10. 用泛型来实现编译时期的类型推断