创建对象的几种模式

[数据转换]将NetCDF(NC)文件转换成单个GeoTIFF文件 有时候要提取tif格式数据中的气象数据,但从气象网站上下载的却是NC格式的文件。这就需要我们将NC格式的文件转换成TIF格式的文件。 阅读详情

对象创建方法其实主要有两种最简单的方式:

  1. 创建一个Object实例
var person = new Object();
person.name = 'jinghong';
person.age = 22;
person.sayName = function(){
    alert(this.name);
  }
  1. 对象字面量
    var person = {
    name = ‘jinghong’,
    age: ‘22’
    }

一、工厂模式

function creatPerson(name, age, job){
  var obj = new Object();
  obj.name = name;
  obj.age = age;
  obj.job = job;
  obj.sayName = function(){
    alert(this.name);
  }
  return obj;
}
var person1 = createPerson('jinghong', 22, 'software engnieer');
var person2 = createPerson('tiantian', 21, 'teacher');

二、构造函数模式

//构造函数模式
function Person(){
  this.name = name;
  this.age = age;
  this.job = job;
  this.sayName = function(){
    alert(this.name);
  }
}
var person1 = new Person('jinghong', 22, 'software engnieer');
var person2 = new Person('tiantian', 21, 'teacher');

注意: 构造函数只是一些使用new 操作符时,被调用的普通函数,并不是一个类。任何函数被new调用时,它就是构造函数;
当一个函数被new表达式中被调用时,他是一个构造函数,他会初始化创建一个新的对象。

使用new来调用函数时会发生一下操作:
  1. 创建一个新的对象
  2. 将构造函数的作用域赋给这个对象(因此这个新对象会绑定到构造函数的this)
  3. 执行构造函数中的代码(为这个新的对象添加属性和方法)
  4. 返回新的对象

在前面的例子中,person1,person2分别是Person的实例;这两个实例对象都有一个constructor属性,该属性指向Person;

console.log(person1.constructor);//Person
console.log(person2.constructor);//Person

构造函数模式和工厂模式不同的地方是,可以将实例标识为一种特定的类型,

console.log(person1 intanceof Object);  //true
console.log(person1 intanceof Person);  //true
构造函数模式的缺点:

构造函数的每个实例中实际上都包含不同的Function实例,即:person1.sayName != person2.sayName
创建两个完成同样任务的Function实例的确没有必要,所以可以通过把函数定义转移到函数外面进行,来解决这个问题:

funtion Person(name, age, job){
      this.name = name;
      this.age = age;
      this.job = job;
      this.sayName = sayName;//一个函数的指针
  }
function sayName(){
  alert(this.name);
 }
 var person3 = new Person('person3', 21, 'doctor');
 person3.sayName();//person3

三、原型模式

function Person(){
}
Person.prototype.name = 'jinghong';
Person.pertotype.age = 29;
Person.prototype.job = 'software Engineer';
Person.pertotype.sayName = funtion(){
  alert(this.name);
 }
var person1 = new Person();
var person2 = new Person();
person1.sayName();//'jinghong';
person2.sayName();//'jinghong'

构造函数为空函数,但是仍然可以通过new构造函数来创建一个新的对象,并且这些对象还会具有相同的属性和方法,但是与构造函数不同的是,新对象的属性和方法是所有实例共享的,所以person1和person2的sayName()方法是同一个函数;

什么是原型对象

在任何时候,只要创建一个新函数,就会根据一组特定的规则为该函数创建一个prototype属性,这个属性指向函数的原型对象,原型对象在默认情况下拥有一个constructor属性,这个属性指向所在函数的指针,例如:Person.prototype.constructor指向person;
这里写图片描述

不能通过对象实例重写原型中的值

如果我们在实例中添加了一个属性,而属性与实例原型中的一个属性同名,那么我们就在实例中创建该属性,该属性会自动屏蔽原型中的那个属性。

简单的原型语法

 function Person(){
 }
 Person.prototype{
    name : 'jinghong',
    age: 21,
    sayName: function(){
        alert(this.name);
    }
 }

原生对象的原型

通过給原生对象的原型对象添加或者修改方法,可以給基本包装类型添加或者修改方法;
例如:給基包装类型String添加名为startsWith()方法,检测一个字符串是否以某个特定的字符开始

String.prototype.stratWith = function(text){
    return this.indexOf(text) == 0;
     }

四、组合使用构造函数模式和原型模式

构造函数用于定义实例属性,原型模式用于定义方法和共享属性,这样所有实例都拥有自己的一份实例属性的副本,同时并拥有对共享方法的引用,最大限度的节省了内存

function Person(name, age, job){
    this.name = name;
    this.age = age;
    this.job = job;
    this.friends = ['a', 'b', 'c']
}
Person.prototype = {
  constructor : Person;
  sayName : function(){
     alert(this.name);
  }
var person1 = new Person('jinghong', 21, 'engineer');
var person2 = new Person('wenjuan', 21, 'engineer');
person1.friends.push('d');
console.log(person1.friends);//'a', 'b', 'c','d'
console.log(person2.friends);//'a', 'b', 'c'
console.log(person1.friends === person2.friends);//false
console.log(person1.sayName === person2.sayName);//true

五、动态原型模式

function Person(name, age, job){
  //属性
   this.name = name;
   this.age = age;
   this.job = job;

  //方法
  if (typeof this.name != 'function'){
   Person.prototype.sayName = function(){
        alert(this.name);
      }
    }
  }

在上述代码中只有当以前的原型对象没有sayName方法时,才在原型链中添加sayName方法,并且这段代码只能在初次调用时才会执行,以后原型已经完成初始化,并且以后生成的实例都将具有修改后的sayName方法;

六、寄生构造函数模式

七、稳妥构造函数模式

基于QT的华为网络摄像头二次开发 第一次使用华为的网络摄像头并进行二次开发,网上关于QT对华为网络摄像头的二次开发的文章很少,基于项目的需求做了一些工作,特此记录。 目标: 1、实时预览 2、手动控制录制视频 3、监听告警型号 4、实时获取元数据中的划定区域内的人数 摄像头型号如下: 准备工作: 在购买摄像头后,应当在官网下载对应的开发资料,如果需要权限,则联系华为的技术支持人员。下载资料如下: SDC Development Kit Demo 8.0.T9 SDK DEMO下载地址:https://bbs.hua 阅读详情

相关推荐

STM32使用ASR01语音播报模块

自己再根据鹿小班模块进行操作进行相关操作,先接上usb数据线。这里提供一套修改好的天问程序模板和stm32f103模板。这里使用的asr01语音播报模块是模块化编程。这里使用的asr01语音播报模块是模块化编程。记得先生成模型再去编译下载。先下载天问block软件。

lml1781978327的博客 1万+

对象创建模式

最近跟着视频学习了五种对象创建模式,做一个总结。 方式一:Object构造函数模式 概括:先创建空的Object对象,再动态添加属性和方法 适用场景:起始时对象的内部数据是不确定的 缺点:语句过多 var p =new Object(); p.name ='javascript'; p.age = 12; p.setName = function(){ //代码块 } 方式二:对象字面量创建模式 概括:使用的括号创建对象,同时指定属性和方法。 适用场景:起始时对象的内部函数是确定的。

lyy_0522的博客 287

VSCode连接SAP ABAP开发环境

本文介绍了使用VSCode连接ABAP开发环境的详细步骤。首先通过SICF或SMICM事务码获取ABAP连接地址,然后安装ABAP remote filesystem插件。提供了两种创建连接的方法:通过命令面板逐步配置(输入服务器地址、账号、系统标识等)或直接编辑JSON配置文件。最后通过命令面板选择已创建的连接即可完成连接,连接成功后可在VSCode左侧工作区查看ABAP系统内容进行开发。JSON配置方式更为简便推荐。整个流程帮助开发者摆脱复杂的Eclipse配置,实现快速便捷的ABAP开发环境搭建。

weixin_45293769的博客 2215

创建对象的五种方式

创建对象的五种方式

欢迎来到我的博客!在这里,我将分享我在前端开发方面的知识和经验。让我们一起探索前端开发的无限可能! 6726

Python离线断网情况下安装numpy、pandas和matplotlib等常用第三方包

联网情况下在命令终端CMD中输入“pip install numpy”即可自动安装,pandas和matplotlib同理一样方法进行自动安装。 工作的电脑不能上外网,所以不能通过直接输入pip命令来安装。 环境:电脑上已经安装了Python(没有安装的请参考其他教程)。 Python离线断网情况下安装numpy、pandas和matplotlib等常用第三方包的步骤如下: ...

dayou7738的博客 4942

网络安全实战:从Wireshark到BurpSuite的抓包技巧解析

本文深入解析了Wireshark和BurpSuite在网络安全抓包中的实战技巧,从基础对比到高级过滤、核心模块应用及安全测试避坑指南。通过详细的操作步骤和案例分析,帮助读者掌握数据包抓取与分析的核心技能,提升网络安全防护能力。

weixin_29207533的博客 573

《创建对象的5种方式》

《创建对象的5种方式》 1.通过 new 关键字 这是最常用的一种方式,通过 new 关键字调用类的有参或无参构造方法来创建对象。比如 Object obj = new Object(); 2.通过 Class 类的 newInstance() 方法 这种默认是调用类的无参构造方法创建对象。 比如 Person p2 =(Person)Class.forName(“com.ys.test.Person”).newInstance(); 3.通过 Constructor 类的 newInstance 方法 这

猫头虎技术团队:授渔优于赠鱼,兴趣引领智慧,探索之乐尤显珍贵。商务合作+:Libin9iOak ,万粉变现+:优快云WF,猫头虎承诺每年免费为100名C站创作者做账号流量诊断服务!全网搜:猫头虎技术团队,点击文章底部名片或直接私信我一切皆可谈,快找虎哥! 1488

21、博弈中的对抗搜索算法解析

本文深入解析了博弈中的对抗搜索算法,涵盖极小极大算法、阿尔法-贝塔剪枝、移动排序与换位表等核心技术。文章分析了算法的数学基础与实现机制,探讨了其在国际象棋、围棋等复杂游戏中的应用,并扩展至多人游戏中的联盟与合作行为。通过对比不同类型策略的优劣,展示了对抗搜索在实际博弈系统中的演进方向与优化路径,为人工智能决策提供了理论支持与实践指导。

rust6ferris的博客 128

Logback Day02:使用注解创建 log 对象

使用注解的方式是不是很方便咧,虽然说有很多注解可以帮助我们去快速开发,但是既然有原始方法我们也要去学习,都要学习、都要去了解,然后再开发中再选择我们需要的就可以了。

zhiqiuqiu2的博客 330

【HALCON工业视觉应用探索】02. C# + Halcon铸件毛刺机器人打磨引导:点云处理从实验室到工业现场的全流程落地

摘要:铸件毛刺的自动化打磨是机械制造领域的重要难题,其随机性(高度0.1-3mm)和复杂工况导致人工打磨效率低(3分钟/件)、工伤率高。本文基于Halcon 24.11与.NET 6,构建了一套点云处理方案:通过线激光扫描仪获取三维点云,经预处理、毛刺检测、路径规划三大模块,引导机器人完成打磨。虚拟实验测试显示,对高度>1mm的毛刺检出率达100%,定位误差±0.08mm,但工业现场受油污、粉尘影响,性能降至检出率68-75%、处理时间>45秒。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1128

Linux加密框架中的算法和算法模式(1)——算法介绍

算法和算法模式

yangguoyu8023的博客 2032

代理类和AOP

代理类和AOP 客户端不用调用目标对象了,直接调用代理类。最终目标方法还是去实行了。 代理类的每个方法调用目标类的相同方法,并且在调用方法时候加上系统功能的代码 代理和目标实现了相同的接口,有相同的方法。通过接口进行引用 要为系统中的各种接口的类增加代理功能,那将需要太多的代理类,全部采用静态代理方法,非常麻烦。 JVM可以在运行期间动态生成类的字节码,这样...

art_code的博客 1218

Python调用CANoe(1)(启动与停止,变量和信号读写)

CANoe因为其封闭性(Vector独有),开发的时候,有很多局限性;Python 因为其开源,容易上手,功能强大,那么Python 和 CANoe结合会产生怎样的火花呢?

蚂蚁小兵 4万+

javaScript创建对象的几种模式

javaScript创建对象的几种模式

qq_26391203的博客 899

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

JavaScript 中创建对象的几种模式

JavaScript 中创建对象的几种模式 虽然Object构造函数或对象字面量都可以用来创建单个对象,但这种方式有个明显的缺点:使用同一个借口创建很多对象,会产生大量重复的代码。为解决这个问题,人们开始使用工厂模式的一个变体。 工厂模式 工厂模式是软件工程领域一种广为人知的设计模式,这种模式抽象了创建具体对象的过程。考虑到ESMAScript中无法创建类,开发人员就发明了一种函数,用函数封...

Miever的博客 249

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

js创建对象的几种模式

js创建对象的几种模式工厂模式构造函数模式原型函数模式组合模式动态原型模式寄生构造函数模式稳妥构造函数 工厂模式 原理: 在一个函数内部完成创建对象添加属性和方法。 缺陷: 无法识别对象的类型。 占内存,没有提取公共方法。 实例: function createPerson(name, age, job){ var o = new Object(); o.name = nam...

clh918的博客 253

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

JavaScript中创建对象的几种模式

代码如下: 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>创建对象的模式</title> 6 <meta name="viewpo...

demonHunter1234的博客 236

JS中创建对象的几种设计模式

工厂模式 定义:工厂模式非常直观,将创建对象的过程抽象为一个函数,用函数封装以特定接口创建对象的细节。通俗地讲,工厂模式就是将创建对象的语句放在一个函数里,通过传入参数来创建特定对象,最后返回创建的对象。 缺陷:工厂模式虽然可以创建多个相似的对象,但却不能解决对象标识的问题,即怎样知道一个对象的类型(如下,我只知道s1是Object-...

weixin_33872660的博客 105

javascript中创建对象的几种设计模式

亲爱的小伙伴,关于javascript中的对象创建,你知道多少种方式呢?下边就让我来分享一下关于javascript创建对象的几种模式吧。

LLL3189860667的博客 981

js中创建对象的几种模式

工厂模式 工厂模式是软件工程领域一种广为人知的设计模式,这种模式抽象了创建具体对象的过程(本书后面还将讨论其他设计模式及其在 Javascript t中的实现)考虑到在 ECMAScript中无法创建类,开发人员就发明了一种函数,用函数来封装以特定接口创建对象的细节,如下面的例子所示。 // 工厂模式 // 注意写法,此时还没有构造函数,函数名小写 function creatperson(name,age){ var o = new Object(); o.name = name;

qq_45371853的博客 178

JavaScript创建对象的几种重要模式

一、工厂模式 1. 代码示例 function person(name, age) { var p = new object(); p.name = name; p.age = age; p.sayName = function() { console.log(this.name); }; return p; } var person1 = person...

aiguanyi0149的博客 125

JavaScript 创建对象的几种模式

在JavaScript中虽说可以用Object的构造函数或者字面量创建单个对象,但是用这些方式来创建多个对象时就有一个明显的缺点,产生了大量的重复代码。为解决这些问题,许多模式就应运而生。 1. 工厂模式 由于在ECMAScript中无法创建类,所以就发明了一种函数,用来封装以特定接口创建对象的细节。 但是以这种方式创建的对象没有解决对象识别问题,即怎样知道一个对象的类型。 funct...

weixin_30438813的博客 105
上一篇: 自定义事件
下一篇: 利用!!window.ActiveXObject监测IE浏览器
景洪在编程
博客等级 码龄9年 13粉丝 63原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值