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有“一千种”方法来创建 ...
随机推荐
- 开发日志:Kylin麒麟操作系统部署ASP.NET CORE
需求场景: 我需要部署的项目是在Windows上开发的,目标框架为.net core 6.0 因此我们需要先在kylin上部署项目运行所需要的环境. 借助百度词条,先看看Kylin是什么: 服务器资源 ...
- 题解:CF1941G Rudolf and Subway
原题链接 简化题意 一个无向连通图中将边分成了不同颜色(保证同种颜色联通),问从 \(b\) 到 \(e\) 最短需要经过几种颜色 思路 考虑因为同种颜色联通,可直接在读入的时候开两个 vector ...
- Surge多配置文件聚合配置方法
目录 摘要 1. Surge配置原理 2. Surge托管配置 3. Surge多配置文件聚合配置 (1)找到配置文件 (2)编辑配置文件 参考 摘要 Surge 是一个在 macOS 和iOS 平台 ...
- Selenium4自动化测试2--元素定位By.ID,By.CLASS_NAME,By.TAG_NAME
三.元素定位方式 1-通过id定位,By.ID id属性在HTML中是唯一的,因此使用id定位可以确保找到页面上唯一的元素. 由于id是唯一的,浏览器在查找元素时可以快速定位到目标元素,提高了定位的效 ...
- leaflet 根据一个经纬度及距离角度,算出另外一个经纬度
/** * 根据一个经纬度及距离角度,算出另外一个经纬度 * @param {*} lng 经度 113.3960698 * @param {*} lat 纬度 22.941386 * @param ...
- mews/captcha 验证码组件
/** * 图像验证码 */ public function captcha(CaptchaBridge $captcha, $type = 'default') { $api_captcha = $ ...
- win10找回Ubuntu启动项(非EasyBCD)
最近想对装在电脑上的Ubuntu进行更新,但是之前在BIOS里改了引导系统的文件,导致找不到Ubuntu启动项,EasyBCD程序也不起作用(整块硬盘Windows分区都是GPT,改BIOS也没什么用 ...
- 一篇文章让你读懂Java异常栈信息
一. 基本的异常打印 public class Test { public static void main(String[] args) { fun1();//第4行 } public static ...
- C# wpf 使用GDI+实现截屏
wpf截屏系列第一章 使用GDI+实现截屏(本章)第二章 使用DockPanel制作截屏框第三章 实现截屏框实时截屏第四章 使用ffmpeg命令行实现录屏 文章目录wpf截屏系列前言一.引用Syste ...
- .NET桌面程序混合开发之一:Winform+H5,WebView2概览
1. 基于Microsoft Edge的WebView2介绍 Microsoft Edge WebView2控件可以将web技术(HTML,css,javascript)应用于原生程序中.WebVie ...