本篇文章讲述了如何使用JavaScript封装一个类,大家对使用JavaScript封装一个类不了解的话或者对使用JavaScript封装一个类感兴趣的话那么我们就一起来看看本篇文章吧, 好了废话少说进入正题吧
学过其他面向对象语言的JavaScripter,可能都应用过类,如:class{},等定义的一系列方法,
但是初学者看是学习js的时候,经常会看到这样一句话,那就是JavaScript是面向对象语言,可是自己无论怎么学习,都不太清楚面向对象编程,我也是如此,开始一直纠结js面向对象编程,这几天算是有所了解了,谈谈我对js类的理解。。。
所谓类,会有以下功能:
1、构造器
2、静态属性,静态方法
3、共有属性,共有方法
4、私有属性,私有方法
本文就说说如何用js实现对类的封装,实现上述功能,
1.一个简单的类
var Person = function(name, age){ this.name = name; this.age = age; this.sayName = function(){ console.log(this.name); }; }
如何你觉得Ta不像类的话,那么你可以这样做
var Person = function(name, age){ //共有属性 this.name = name; this.age = age; //共有方法 this.sayName = function(){ console.log(this.name); }; }
如果对于构造函数模式不太清楚的话,可以看看这里js创建对象之设计模式
2.一个复杂的类
有了上面的例子之后,我们在此基础之上就可以进行我们的完善了。
var Person = function(name, age){ //共有属性 this.name = name; //共有方法 this.sayName = function(){ console.log(this.name); }; //静态私有属性(只能用于内部调用) var home = "China"; //静态私有方法(只能用于内部调用) function sayHome(){ console.log(home); } //构造器 this.setAge = function(age){ console.log(age + 12); }; this.setAge(age); }//静态方法(只能被类来访问)Person.sayAge = function(){ console.log("your age is 12"); }//静态属性(只能被类来访问)Person.drink = "water";//静态共有方法(类和实例都可以访问)Person.prototype.sayWord = function(){ console.log("ys is a boy"); }
js中利用上述的模拟方法,实现了对类的创建,在此基础上,我们不安现状,想要对他进行封装,让他成为一个整体,更利于体现js的封装性。
3.封装js类
这里我们用闭包来实现,首先解释下闭包的概念。
闭包概念:一个函数有权访问另一个函数作用域中的变量,即在一个函数内部创建另一个函数
实现如下:
var Person = (function(){ //静态私有属性方法 var home = "China"; function sayHome(name){ console.log(name + "'s home in " + home); } //构造函数 function _person(name, age){ var _this = this; //构造函数安全模式,避免创建时候丢掉new关键字 if(_this instanceof _person){ //共有属性, 方法 _this.name = name; _this.getHome = function(){ //内部访问私有属性,方法 sayHome(_this.name); }; _this.test = sayHome; //用于测试 //构造器 _this.setAge = function(age){ _this.age = age + 12; }(age); }else{ return new _person(name, age); } } //静态共有属性方法 _person.prototype = { constructor: _person, drink: "water", sayWord: function(){ console.log("ys is a boy"); } } return _person; })();
调用如下:
var p1 = new Person("ys", 12); p1.getHome(); //ys's home in China console.log(p1.age); //24 var p2 = Person("ys", 12); p2.getHome(); //ys's home in China console.log(p2.age); //24 console.log(p2.test == p1.test); //true, 证明静态私有变量共享性
如上面的代码一样,我们就用js实现了类
总结:
1、有些公共属性,方法,可以设置为静态的,这样可以在每次实例化的时候,不需要额外开辟内存资源,达到真正意义上的共享,
2、有些公共的属性方法,只想在内部程序处理时候达到共享,则设置为,静态私有属性方法,
3、有些公共的属性方法,想在实例对象中达到共享,则设置为prototype属性方法,
以上就是本篇文章的所有内容,大家要是还不太了解的话,可以自己多实现两边就很容易掌握了哦!
相关推荐:
以上是使用JavaScript封装一个类的详细内容。更多信息请关注PHP中文网其他相关文章!

去掉重复并排序的方法:1、使用“Array.from(new Set(arr))”或者“[…new Set(arr)]”语句,去掉数组中的重复元素,返回去重后的新数组;2、利用sort()对去重数组进行排序,语法“去重数组.sort()”。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于Symbol类型、隐藏属性及全局注册表的相关问题,包括了Symbol类型的描述、Symbol不会隐式转字符串等问题,下面一起来看一下,希望对大家有帮助。

怎么制作文字轮播与图片轮播?大家第一想到的是不是利用js,其实利用纯CSS也能实现文字轮播与图片轮播,下面来看看实现方法,希望对大家有所帮助!

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于对象的构造函数和new操作符,构造函数是所有对象的成员方法中,最早被调用的那个,下面一起来看一下吧,希望对大家有帮助。

方法:1、利用“点击元素对象.unbind("click");”方法,该方法可以移除被选元素的事件处理程序;2、利用“点击元素对象.off("click");”方法,该方法可以移除通过on()方法添加的事件处理程序。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于面向对象的相关问题,包括了属性描述符、数据描述符、存取描述符等等内容,下面一起来看一下,希望对大家有帮助。

foreach不是es6的方法。foreach是es3中一个遍历数组的方法,可以调用数组的每个元素,并将元素传给回调函数进行处理,语法“array.forEach(function(当前元素,索引,数组){...})”;该方法不处理空数组。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于BOM操作的相关问题,包括了window对象的常见事件、JavaScript执行机制等等相关内容,下面一起来看一下,希望对大家有帮助。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

SublimeText3 英文版
推荐:为Win版本,支持代码提示!

禅工作室 13.0.1
功能强大的PHP集成开发环境