JavaScript极简主义类编写法:封装、继承与私有属性

作者:闭包旅人时间:2026-10-22 09:42:06浏览:540

本文介绍由Gabor de Mooij提出的JavaScript极简主义类编写法。该方法通过对象模拟类,利用createNew()生成实例,无需this和prototype。文章详细讲解了如何基于此模式实现封装、继承、私有属性及数据共享,并分析了其优缺点,如不支持instanceof及内存占用问题。

极简主义法概述

这种被称为“极简主义法”的技术由荷兰程序员Gabor de Mooij提出,其核心特点是不使用this和prototype,部署代码极为简便,这也是其得名的原因。下文将演示如何利用该方法完成JavaScript的封装与继承操作。

封装实现

1. 封装

首先,该方法通过一个对象来模拟“类”。在此对象内部定义一个名为createNew()的构造函数,专门用于生成实例。


 var Cat = {
     createNew: function(){
       // some code here
     }
 };

接着,在createNew()函数内部定义一个实例对象,并将其作为返回值返回。


var Cat = {
     createNew: function(){
       var cat = {};
       cat.name = "大毛";
       cat.makeSound = function(){ alert("喵喵喵"); };
       return cat;
     }
 };

使用时,只需调用createNew()方法,即可获得所需的实例对象。


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

这种方式的优点在于易于理解,结构清晰且优雅,符合传统“面向对象编程”的构造逻辑,从而便于后续特性的部署。

继承机制

2. 继承

实现类之间的继承非常便捷。只需在子类的createNew()方法中调用父类的createNew()方法即可。首先定义一个Animal类:


 var Animal = {
     createNew: function(){
       var animal = {};
       animal.sleep = function(){ alert("睡懒觉"); };
       return animal;
     }
 };

随后,在Cat类的createNew()方法中调用Animal类的createNew()方法。


var Cat = {
     createNew: function(){
       var cat = Animal.createNew();
       cat.name = "大毛";
       cat.makeSound = function(){ alert("喵喵喵"); };
       return cat;
     }
 };

通过这种方式生成的Cat实例,将自动继承Animal类的特性。


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

私有属性与方法

3. 私有属性和私有方法

在createNew()方法中,凡是不定义在cat对象上的方法和属性,均被视为私有。


 var Cat = {
     createNew: function(){
       var cat = {};
       var sound = "喵喵喵";//私有属性
       cat.makeSound = function(){ 
      alert(sound); 
     };
       return cat;
     }
 }; 

例如上例中的内部变量sound,外部无法直接读取,必须通过cat的公有方法makeSound()才能访问。


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

数据共享方案

4. 数据共享

若需所有实例对象读写同一项内部数据,只需将该内部数据封装在类对象内部、createNew()方法外部即可。


 var Cat = {
     sound : "喵喵喵",
     createNew: function(){
       var cat = {};
       cat.makeSound = function(){ alert(Cat.sound); };
       cat.changeSound = function(x){ Cat.sound = x; };
       return cat;
     }
 };

接着生成两个实例对象:


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

此时,若其中一个实例对象修改了共享数据,另一个实例对象也会受到相应影响。


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

优缺点分析

极简主义法看似美好,但也存在缺陷。首先,无法使用instanceof判断对象所属类,“cat1 instanceof Cat”会返回false。其次,虽然摆脱了原型链的缺点(如属性不能私有、创建和继承不够直观),但也暴露了未使用原型链的弊端:每次生成实例时,都必须为重复内容分配额外内存。

总结

以上介绍了使用极简主义法编写JavaScript类的方法,希望能对大家有所帮助。如有任何疑问,欢迎留言,小编会及时回复。感谢大家对本站的支持!

作者最新文章