js-对象创建
哥被逼得要当全栈工程师,今天练习了下各种对象的创建方式。代码较多参考了https://www.cnblogs.com/ImmortalWang/p/10517091.html
为了方便测试,整合了一个Student的类,包含了各种属性。
myboj.js内容
/**
* 这是一个关于js的简单测试
* 一个关于student的基本测试
* student,具有基本的属性:subject,class,family,和其它基本信息
* 要实现的动作:
* 专业:添加课程,删除课程
* 课程:添加课程,删除课程,上课,考试,成绩统计,成绩打印
* 家庭:添加,删除,打印家庭成员信息
*
* 使用对象人:老师
*/ /**
* 工厂模式--工厂模式通过将对象的创建封装到一个方法中,再通过在调用该方法时传入参数而实现对象的实例化,解决了以上提到的产生大量重复代码的问题
* 但是工厂模式也存在一个不足,就是通过该方法创建的对象的构造函数全都是Object,没有辨识度。
* 没有办法通过构造函数辨别一个对象到底是Person还是Dog,亦或是Cat。于是乎,为了解决这个问题,就引入了构造函数模式
*/ /**
* @description 工厂模式结合object 创建对象--家庭成员。严重的问题:不符合,不类似其它高级语言的类定义
* @param {*} name
* @param {*} sex
* @param {*} relation
*/
function createFamily(name,sex,relation){
let m=new Object();
m.name=name;
m.sex=sex;
m.relation=relation;
m.toString=function(){
return "姓名:"+this.name+",性别:"+this.sex+",关系:"+this.relation;
}
return m;
} /**
* 构造函数模式 -- 遵循大峰驼命名对象
*/
function Subject(name,teachderName, passScore){
this.name=name;
this.teachderName=teachderName;
this.passScore=passScore;
this.toString=function(){
return "课程名称:"+this.name+",老师名称:"+this.teachderName+",及格分数线:"+this.passScore;
}
} /**
* 构造函数+原型模式结合
* 构造函数模式和原型模式结合在一起,继承了它们优点的同时又避免了各自的缺点。
* 它将具有各自特点的属性和方法定义在构造函数中,将实例间共享的属性和方法定义在prototype上,
* 成为了在es6出现之前使用最普遍的一种创建对象模式。
*/
function Classes(subject,teacher,studyTime){
this.subject=subject;
this.teacher=teacher;
this.studyTime=studyTime;
} Classes.prototype={
constructor:Classes,
toString:function(){
return this.teacher+"在"+this.studyTime+" 上 " +this.subject.name;
}
} /**
* class定义-es6标准
* 注意内部的不同方法之间,不需要逗号分好隔离,更加类似其余语言的类定义
*/
class Student{
// #subjects;
// #classes;
// #families;
constructor(name,sid,sex) {
this.name=name;
this.sid=sid;
this.sex=sex;
this.subjects=new Array();
this.classes=new Array();
this.families=new Array();
}
addSubject(subject) {
this.subjects.push(subject) ;
}
addClasses(classes){
this.classes.push(classes);
}
addFamilies(family){
this.families.push(family);
}
print(){
console.log(this.families.length+":"+this.subjects.length+":"+this.classes.length);
for(let i=0,len=this.families.length;i<len;i++){
console.log(this.families[i]);
console.log(this.families[i].toString());
} for(let i=0,len=this.subjects.length;i<len;i++){
console.log(this.subjects[i]);
console.log(this.subjects[i].toString());
} for(let i=0,len=this.classes.length;i<len;i++){
console.log(this.classes[i]);
console.log(this.classes[i].toString());
} }
}
objtest.html内容
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<input type="button" value="regme" onclick="fn_click()">
</body>
<script type="text/javascript" src="myobj.js"></script>
<script>
var modelMap={
match:function(fileName){
return this.newMatch(fileName);
},
newMatch:function(fileName){
return '11111--'+fileName;
} };
function fn_click(){
let str="sd23";
let nstr=str.search("bsd");
alert(nstr);
} function test(){
let student= new Student("luzhifei","103","man");
let girl=createFamily("lml","girl","女儿");
student.addFamilies(girl); let hanyu=new Subject("汉语","luzhifei",75);
student.addSubject(hanyu); let cls=new Classes(hanyu,"luzhifei","星期一");
student.addClasses(cls);
student.print(); }
</script>
</html>
在控制台运行test(),结果如下:
姓名:lml,性别:girl,关系:女儿
课程名称:汉语,老师名称:luzhifei,及格分数线:75
luzhifei在星期一 上 汉语
总结:
还是用Class的方式好,这是长久以来的习惯!希望老浏览器尽快淘汰吧!
js-对象创建的更多相关文章
- JS对象创建的几种方式整理
本文主要介绍了JS对象创建的几种方式 第一种:Object构造函数创建 var Person = new Object(); Person.name = 'Nike'; Person.age = ...
- js 对象创建设计模式
创建js对象可以使用多种模式,每种模式有着不同的特点:如下: 1.工厂模式:创建一个函数,在函数中实例化一个对象,当每次调用函数时,就实例化一个对象,并返回这个对象: 我们知道,对象是引用形式的,每次 ...
- JS对象创建模式
JS的对象创建模式 1.Object构造函数模式 var person = new Object(); person.name = 'name'; person.age = 43; console.l ...
- JS对象创建常用方式及原理分析
====此文章是稍早前写的,本次属于文章迁移@2017.06.27==== 前言 俗话说"在js语言中,一切都对象",而且创建对象的方式也有很多种,所以今天我们做一下梳理 最简单的 ...
- JS对象创建的几种方法
最近一直在看JS高级程序设计这本书,有空来梳理一下几种创建对象的方式.话不多说,直接步入正题. 第一种:Object构造函数创建 var Person = new Object(); Person.n ...
- 用js对象创建链表
//以下是一个链表类 function LinkedList(){ //Node表示要加入列表的项 var Node=function(element){ this.element=element; ...
- js学习(六)- js对象创建
//---------------------js文件--------------------- var namespace02=new Object(); namespace02.Person=fu ...
- JS——对象创建
1.原始创建 <script> person = new Object();//不要var person.firstname = "Bill"; person.last ...
- 浅谈Js对象的概念、创建、调用、删除、修改!
一.我们经常困惑,对象究竟是什么,其实这是一种思维,一种意识上的东西,就像我们都说 世界是有物质组成的道理一样,理解了下面的几句话!对象也不是那么抽象! 1.javascript中的所有事 ...
- 在这个看脸的世界,该如何优雅的创建JS对象
Javascript是一门解释型的语言,是基于对象的,严格来说并不怎么符合的面向对象的标准,显著的特点就是函数就是“一等对象”,与传统的面向对象语言不同的时,Javascript有“一千种”方法来创建 ...
随机推荐
- Asp .Net Core 系列:国际化多语言配置
目录 概述 术语 本地化器 IStringLocalizer 在服务类中使用本地化 IStringLocalizerFactory IHtmlLocalizer IViewLocalizer 资源文件 ...
- SAP集成技术(一)历史
最近想读一本书<SAP Interface Management Guide>,打算边读边记录一些笔记.翻译主要由ChatGPT完成. 本文链接:https://www.cnblogs.c ...
- Linux中的man page指令
以Linux上的date命令为例,在控制台输入 man date,将会展示如下界面: [vbird@www ~]$ man date DATE(1) User Commands DATE(1) # 请 ...
- 纯JavaScript实现“返回顶部”和“评分”,“分享”等小功能
1.返回顶部功能的实现 <!DOCTYPE html> <html> <head> <title>Back to Top</title> & ...
- ip地址、子网掩码、网关、dns简介
IP地址IPADDR: IP地址是唯一的标识,是一段网络编码(二进制),由32位组成. IP 是 Internet Protocol(网际互连协议)的缩写,是 TCP/IP 体系中的网络层协议. IP ...
- jeecgboot集成Mongodb
1.引入jar包依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId ...
- Linux(一):Linux操作系统
Linux(一):Linux操作系统 对于我们编程人员来讲,linux对于我们几乎已经是像windows对于普通用户一样,好像和同行交流说不会linux就像说不会用计算机一样羞耻.这里打算从头开始温故 ...
- 在 Chromebook 上使用 Word 的最佳方法
Splashtop 允许您从 Chromebook 远程控制 Windows 和 Mac 计算机,从而可以访问 Word 的桌面版本和所有文件. 对于远程工作者和学生,Chromebook 可以是一种 ...
- Win10-常用cmd命令与快捷键
以下全部是本人私认为平时经常用到的指令,持续更行中- 常用快捷键 win + R : 输入cmd回车,打开命令提示符界面 win + E : 打开文件资源管理器(俗称:文件夹) win + S : 搜 ...
- next-元数据创建、更新 SEO 优化
在创建Next.js项目时,根页面会自动生成一个metadata对象,其中包含标题和描述等关键信息.每当页面被访问时,这个metadata对象会被读取并应用到HTML的默认配置中,确保页面的基本信息得 ...