首页 > 其他分享 >js的一些设计模式概念记录

js的一些设计模式概念记录

时间:2023-03-09 19:44:57浏览次数:34  
标签:name 记录 js sayName Person job let 设计模式 构造函数

工厂模式

function createPerson(name, age, job) {
  let o = new Object();
  o.name = name;
  o.age = age;
  o.job = job;
  o.sayName = function() {
  console.log(this.name);
  };
  return o;
}
let person1 = createPerson("Nicholas", 29, "Software Engineer");
let person2 = createPerson("Greg", 27, "Doctor");

工厂模式可以解决创建多个类似对象的问题,但是没有解决对象标识问题

构造函数模式

function Person(name, age, job){
  this.name = name;
  this.age = age;
  this.job = job;
  this.sayName = function() {
  console.log(this.name);
  };
}
let person1 = new Person("Nicholas", 29, "Software Engineer");
let person2 = new Person("Greg", 27, "Doctor");
person1.sayName(); // Nicholas
person2.sayName(); // Greg

Person()构造函数代替了createPerson()工厂函数基本一样,但是有以下区别

  • 没有显示地创建对象
  • 属性和方法直接赋值给了this
  • 没有return

使用new操作符。以这种方式调用构造函数会执行如下操作
1.内存中创建一个新对象
2.这个新对象内部的[[Prototype]]特性被赋值为构造函数的prototype属性
3.构造函数内部的this被赋值为这个新对象(即this指向新对象)
4.执行构造函数内部的代码(给新对象添加属性)
5.如果构造函数返回非空对象,则返回该对象;否则返回刚创建的新对象。

原型模式

function Person() {} 
Person.prototype.name = "Nicholas"; 
Person.prototype.age = 29; 
Person.prototype.job = "Software Engineer"; 
Person.prototype.sayName = function() { 
 console.log(this.name); 
}; 
let person1 = new Person(); 
person1.sayName(); // "Nicholas" 
let person2 = new Person(); 
person2.sayName(); // "Nicholas" 
console.log(person1.sayName == person2.sayName); // true 

标签:name,记录,js,sayName,Person,job,let,设计模式,构造函数
From: https://www.cnblogs.com/gzeal/p/17201170.html

相关文章

  • JSON.parse()没反应
    https://www.runoob.com/json/json-parse.htmlhttps://blog.csdn.net/weixin_42700654/article/details/117782146JSON通常用于与服务端交换数据。在接收服务器数据时......
  • spring mvc 学习记录
    2023年3月9日0.工作流程1.spring-boot-starter-web在pom.xml中加入,用于快速配置web项目,加入该配置后运行就可做web后台使用<dependency> <groupId>org.springframe......
  • 记录沁恒芯片的一个bug
    使用场景:CH32V203F6P6作为SPI主机(同时使用UART作为调试口)         CH32V203C8T6作为SPI从机(同时使用UART作为调试口)使用杜邦线进行SPI的链......
  • 问题记录:jss文件服务器定时任务下载失败
    jss文件服务器定时任务下载失败报错信息:客户端http连接池获取连接超时问题背景:每5min跑一次定时任务,从文件服务器下载文件更新内存,但是更新内存前会拿文件更新时间进行......
  • js字符串详解(一):什么是字符串,内置对象以及包装类型对象
    1.什么是:多个字符组成的只读字符数组   vs数组:下标i          length          slice() concat   不同:......
  • js字符串详解(二):字符串API
    所有字符串API都无权修改原字符串,只能返回新字符串!转换 1.大小写转换:将字符串中所有英文字母转为统一的大小写   何时:只要不区分大小写时,都要先转为一致的大......
  • js正则表达式详解(一):语法
    什么是:专门定义一类字符串统一规则的表达式   何时:1.按照指定规则模糊查找一类关键词时      2.表单中验证输入项的格式  如何:语法:   ......
  • js正则表达式详解(二):RegExp的Api
       验证:检查字符串是否完全符合正则表达式的要求!   如何:varbool=reg.test(待检测字符串)     强调:只要验证,reg中必须前加^后加$    ......
  • 打造让别人眼前一亮的Portfolio(从0到1) - 使用React和Three JS
        【打造让别人眼前一亮的Portfolio(从0到1)-使用React和ThreeJS】https://www.bilibili.com/video/BV1D54y1u7a7?vd_source=9dbcff019fe7cd087d0ea14c75f1546......
  • [设计模式]设计模式之装饰器模式/包装模式【8】【待完善】
    1概述当你在编写代码时,需要扩展一个类的功能,或者是当前类的接口不能满足需求时,你会选择怎么做?重新编写子类,通过继承加入功能?修改原有类的接口使其符合现有环境?但你......