哥被逼得要当全栈工程师,今天练习了下各种对象的创建方式。代码较多参考了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-对象创建的更多相关文章

  1. JS对象创建的几种方式整理

    ​ 本文主要介绍了JS对象创建的几种方式 第一种:Object构造函数创建 var Person = new Object(); Person.name = 'Nike'; Person.age = ...

  2. js 对象创建设计模式

    创建js对象可以使用多种模式,每种模式有着不同的特点:如下: 1.工厂模式:创建一个函数,在函数中实例化一个对象,当每次调用函数时,就实例化一个对象,并返回这个对象: 我们知道,对象是引用形式的,每次 ...

  3. JS对象创建模式

    JS的对象创建模式 1.Object构造函数模式 var person = new Object(); person.name = 'name'; person.age = 43; console.l ...

  4. JS对象创建常用方式及原理分析

    ====此文章是稍早前写的,本次属于文章迁移@2017.06.27==== 前言 俗话说"在js语言中,一切都对象",而且创建对象的方式也有很多种,所以今天我们做一下梳理 最简单的 ...

  5. JS对象创建的几种方法

    最近一直在看JS高级程序设计这本书,有空来梳理一下几种创建对象的方式.话不多说,直接步入正题. 第一种:Object构造函数创建 var Person = new Object(); Person.n ...

  6. 用js对象创建链表

    //以下是一个链表类 function LinkedList(){ //Node表示要加入列表的项 var Node=function(element){ this.element=element; ...

  7. js学习(六)- js对象创建

    //---------------------js文件--------------------- var namespace02=new Object(); namespace02.Person=fu ...

  8. JS——对象创建

    1.原始创建 <script> person = new Object();//不要var person.firstname = "Bill"; person.last ...

  9. 浅谈Js对象的概念、创建、调用、删除、修改!

    一.我们经常困惑,对象究竟是什么,其实这是一种思维,一种意识上的东西,就像我们都说    世界是有物质组成的道理一样,理解了下面的几句话!对象也不是那么抽象!    1.javascript中的所有事 ...

  10. 在这个看脸的世界,该如何优雅的创建JS对象

    Javascript是一门解释型的语言,是基于对象的,严格来说并不怎么符合的面向对象的标准,显著的特点就是函数就是“一等对象”,与传统的面向对象语言不同的时,Javascript有“一千种”方法来创建 ...

随机推荐

  1. dotnet 5 让 WPF 调用 WindowsRuntime 方法

    本文告诉大家在 dotnet 5 里,如何使用 WinRT 加上 Microsoft.Windows.SDK 的辅助来调用 WindowsRuntime 方法.当前是 2021.10 此时的 Wind ...

  2. ChatGPT 眼中的程序员

    1 你如何看待程序员这个行业 程序员这个行业在现代社会扮演着非常重要的角色.作为一个技术驱动的职业,程序员们负责开发.设计和维护软件和应用程序,这些技术改变了我们的生活方式.商业模式和社会互动方式. ...

  3. Solution Set - 数论相关

    绝了,六道题都差一步想出来或者差一个细节就开始看题解. CF906D Link&Submission. 要求 \(a^b\bmod p\),那就要求 \(b\bmod \varphi(p)\) ...

  4. NSThread的main方法内部做了什么?

    NSThread当调用start方法的时候,start方法就会调用main方法.那么这个main方法内部做了什么呢?下面是汇编码: 1 ;Foundation`-[NSThread main]: 2 ...

  5. 《最新出炉》系列入门篇-Python+Playwright自动化测试-45-鼠标操作-下篇

    1.简介 鼠标为我们使用电脑提供了很多方便,我们看到的东西就可以将鼠标移动过去进行点击就可以打开或者访问内容,当页面内容过长时,我们也可以使用鼠标滚轮来实现对整个页面内容的查看,其实playwrigh ...

  6. 🔥🔥v1.9.2-httpsok快速申请免费谷歌SSL证书

    v1.9.2-httpsok快速申请免费谷歌SSL证书 介绍 httpsok 是一个便捷的 HTTPS 证书自动续签工具,专为 Nginx .OpenResty 服务器设计.已服务众多中小企业,稳定. ...

  7. 当你用neovim的mason插件管理lsp config,并且配置好bash的bashls后,却没有正常工作的解决方式

    刚开始遇到这个情况我百思不得其解,检查了neovim checkhealth,以为是npm包管理的问题,然后删了下删了下 不但没有解决还把包管理整乱了-- 后来发现是我没仔细看bash-languag ...

  8. Java中Future 用来做异步任务返回

    我们在开发中会有这种场景,我们要调用远程服务的一个方法,并且拿到返回值去使用.笔者最近项目中出现了一个ANR,具体是调用了远程服务,发生异常一直没有返回值,然后导致ANR. 怎么解决呢?找了一圈,发现 ...

  9. ansible自定义模板部署apache服务

    使用Ansible来部署Apache服务是一个很好的选择,因为它可以自动化部署过程,确保所有的服务器上都有相同的配置.以下是一个简单的步骤指南,展示如何使用Ansible来部署Apache服务: 1 ...

  10. WPF登录界面样例

    XAML文件内容如下 1 <Window x:Class="ERP.Views.Login" 2 xmlns="http://schemas.microsoft.c ...