JavaScript学习总结(九)——Javascript面向(基于)对象编程
发布日期:2021-07-01 01:48:03
浏览次数:2
分类:技术文章
本文共 3215 字,大约阅读时间需要 10 分钟。
转载自
一、澄清概念
1.JS中"基于对象=面向对象"
2.JS中没有类(Class),但是它取了一个新的名字叫“原型对象”,因此"类=原型对象"
二、类(原型对象)和对象(实例)的区别与联系
1.类(原型对象)是抽象,是概念的,代表一类事物。
2.对象是具体的,实际的,代表一个具体的事物。
3.类(原型对象)是对象实例的模板,对象实例是类的一个个体。
三、抽象的定义
在定义一个类时,实际上就是把一类事物的共有属性和行为提取出来,形成一个物理模型(模板),这种研究问题的方法称为抽象。
四、JavaScript面向对象三大特征
4.1.封装
封装就是把抽象出来的属性和对属性的操作封装在一起,属性被保护在内部,程序的其它部分只有通过被授权的操作(函数),才能对属性进行操作!
封装的范例:
4.2.继承
继承范例:
运行结果:
4.3.多态
所谓多态,就是指一个引用在不同情况下的多种状态,在Java中多态是指通过指向父类的引用,来调用不同子类中实现的方法。
JS实际上是无态的,是一种动态语言,一个变量的类型是在运行过程中由JS引擎决定的,所以说,JS天然支持多态。
五、JavaScript自定义类(原型对象)的方式
5.1.工厂方法——使用new Object创建对象并添加相关属性
//通过Object直接创建对象 //var p1 = new Object();//创建一个Object对象 var p1 = {};//创建一个Object对象,简写 //动态增加属性、方法 p1.Name = "孤傲苍狼"; p1.Age = 24; p1.SayHello = function() { alert("hello,"+p1.Name); }; p1.SayHello(); for(var propertyName in p1) {//对象的成员都是对象的key alert(propertyName); }
5.2.使用构造函数来定义类(原型对象)
基本语法:
function 类名(){ this.属性名;//公共属性 var 属性名;//私有属性 /*凡是定义类的公共属性和公共方法都要使用this*/ //定义类的公共函数 this.函数名=function(){ } //定义类的私有函数 function 函数名(){ }}
范例:
/*定义一个猫类,这种就是使用构造函数来定义类(原型对象)*/ function Cat(){ this.Name="catName";//public属性 this.Age;//public属性 this.Color;//public属性 var weight=2;//private属性,只能在Cat类内部使用,Cat类的对象无法访问这个私有属性 //public方法 this.publicFunction = function(){ alert(weight); alert("猫叫..."); } //private方法,只能在Cat类内部使用,Cat类的对象无法访问这个私有方法 var privateFunction = function(){ alert("私有方法"); } } //如果这样用,那么就当成函数来使用 Cat(); //如果这样用,那么就当成类来使用 var cat1 = new Cat(); //cat1就是一个对象(实例) alert(cat1.Name);//访问公共属性,弹出默认值catName cat1.Name="TomCat";//访问公共属性 cat1.Age=3;//访问公共属性 cat1.Color="白色";//访问公共属性 alert(cat1.weight);//访问私有属性,无法访问,弹出undefined alert(cat1.Name+"\t"+cat1.Age+"\t"+cat1.Color);//访问对象的属性方式1:对象名.属性名 alert(cat1["Name"]+"\t"+cat1["Age"]+"\t"+cat1["Color"]);//访问对象的属性方式2:对象名["属性名"] cat1.publicFunction();//调用public方法 cat1.privateFunction();//调用private方法,报错:对象不支持此属性或方法 for(var property in cat1){ document.writeln(property+"\t"); }
JS中一切都是对象,类(原型对象)其实也是对象,它实际上是Function类的一个实例
document.write(""); function Person(){ } /*Person.constructor得到的Person类的构造函数如下: function Function() { [native code] } */ document.writeln("Person.constructor:"+Person.constructor);//Person类的构造函数 document.writeln("Person:"+Person); var p1 = new Person(); document.writeln("p1.constructor:"+p1.constructor);//”p1.constructor“是得到p1实例的构造函数 //如何判断某个对象是不是某个类型,采用如下两种方式 if(p1 instanceof Person){ document.writeln("p1 is Person ok1"); } if(p1.constructor==Person){ document.writeln("p1 is Person ok2"); } var num1=123; document.writeln("num1.constructor:"+num1.constructor); var str1="abc"; document.writeln("str1.constructor:"+str1.constructor); document.write("")
运行结果:
Person.constructor:function Function() { [native code]}Person:function Person(){ }p1.constructor:function Person(){ }p1 is Person ok1p1 is Person ok2num1.constructor:function Number() { [native code]}str1.constructor:function String() { [native code]}
转载地址:https://maokun.blog.csdn.net/article/details/81431009 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年04月22日 03时28分00秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Go语言并发组件
2019-05-01
Go语言的并发模式
2019-05-01
Linux中如何优雅的删除被打开的文件
2019-05-01
从零开始学Linux内核-----从Unix到Linux
2019-05-01
Linux内核学习----进程管理
2019-05-01
linux内核学习-----进程调度
2019-05-01
算法实现----二分查找go语言实现
2019-05-01
简析STUN协议
2019-05-01
使用 Minidumps 和 Visual Studio .NET 进行崩溃后调试
2019-05-01
Debug 和 Release 编译方式的本质区别
2019-05-01
struts返回xml数据例子
2019-05-01
内存对齐详解
2019-05-01
秋招总结(一)-C++归纳
2019-05-01
秋招总结(三)-操作系统归纳
2019-05-01
带缓冲I/O 和不带缓冲I/O的区别与联系
2019-05-01
LINUX CP命令详解
2019-05-01
source insight快捷键及使用技巧
2019-05-01
映 射 ALT 键
2019-05-01
vim使用快捷键F4生成文件头注释、F5生成main函数模板、F6生成.h文件框架模板
2019-05-01