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有“一千种”方法来创建 ...
随机推荐
- [FAQ] Error: Component series.bar not exists. Load it first. (echarts)
以上错误出现在使用 echarts 组件时,未导入或者使用不正确的情况下. 检查是否导入 line 或者 bar 这一类具体的 chart,比如: import 'echarts/lib/chart/ ...
- 每天5分钟复习OpenStack(十三)存储缓存技术Bcache
Ceph作为一个分布式存储,在项目中常见的形态有两者,一种是采用 SSD 或NVME 磁盘做Ceph的日志盘,使用SATA磁盘来做数据盘.这样的好处是比较经济实惠.另一种则是全部采用 SSD 或NVM ...
- vue--v-if和v-show的区别(个人项目中的理解应用)
在面试的时候,一道vue基础到不能再基础的面试题叫做v-if与v-show的区别,当然答案网上一搜一大堆,基本两句话就能说明: 1.相同点:都是根据指令是否渲染该组件 2.不同点:v-if仅重新渲染当 ...
- 【动画进阶】巧用 CSS/SVG 实现复杂线条光效动画
最近,群里在讨论一个很有意思的线条动画效果,效果大致如下: 简单而言,就是线条沿着不规则路径的行进动画,其中的线条动画可以理解为是特殊的光效. 本文,我们将一起探索,看看在不使用 JavaScript ...
- 为什么需要学习ITSM/ITIL
假如你需要管理一个超过20人的IT服务组织,一般会面临以下问题: 人多事杂活重,每个人都很累,工作却还是一团糟糕, 用户方怨声载道,领导也颇有微词,同事间也经常互相甩锅埋坑, 工作只是救火或者混日子, ...
- USB3.0与Type-C接口的关系
USB全称为Universal Serial Bus,翻译过来就是通用串行总线,是连接计算机与外部设备的一种串口总线标准.USB的发展经历了一下阶段: USB1.0:1.5Mbps(192KB/s)低 ...
- chgrp chown
chgrp 用来改变文件所属群组,如果要改变的群组不在/etc/group里面,将会报错. chown 用来改变文件的所有者,如果改变的所有者便在/etc/passwd里面,将会报错. 需要注意的是c ...
- ubuntu16下升级python3的版本--升级到3.8
ubuntu16下升级python3的版本,这里是升级到3.8. 1.首先添加安装源,在命令行输入如下命令: $ sudo add-apt-repository ppa:jonathonf/pytho ...
- vue3.4中defineModel中默认值是复杂数据类型 (注意!!!)
const drillFields = defineModel<string[]>('drillFields', { get(val) { return reactive(val || [ ...
- C语言:删除顺序表中重复的信息—(删除顺序表中重复的单词)
如何删除顺序表中的重复单词: (开始看内容之前容朕说一句:如果你最后怎么都运行不了你想要的结果,①我敢保证大概率是你的下标越界你的下标越界了你的下标越界了.②在我这程序里面你肯定打少了p--,少了p- ...