js中如何使用工厂方式和构造函数创建对象,web开发项目实例

简介: js中如何使用工厂方式和构造函数创建对象,web开发项目实例


  • 1)立刻创建对象------ 一旦调用构造函数,立刻创建对象(因为使用new关键字,就如我们前面学习的,使用new会立刻在堆内存中开辟新的空间创建对象
  • 2)将新建的对象设置为函数中的this(因此在构造函数中,可以使用this来引用新建的对象)

最终

  • 3)逐行执行函数的代码
  • 4)将这个新建的对象作为返回值返回

总结:

  • 使用同一个构造函数创建的对象属于同一个类
  • 每个对象称为该类的实例
  • 使用(对象 instanceof 狗仔函数)可以检查obj是否为Person类的实例

如: per instanceof Person --true表示是,反之

使用new Object()方式区别不出来

但是!!!!

per instanceof Object----返回结果是true

Object相当于祖宗,因为所有对象都是它的后代

使用构造函数的存在的缺陷:

对于同功能的方法,完全可以使所有对象共享同一个方法(不用每次创建对象时都创建)

解决方法:

将这个函数提出到全局作用域中

同时,所有又同个构造方法创建的对象的方法都是指向了同一个全局的fun方法

好处:大大节省了空间与提高了性能

但是又引发了新的问题,即尽量不要在全局作用域中添加变量

  • (因为将函数定义在全局作用域中,污染了全局作用域的命名空间
  • 而且定义在全局作用域中不安全(因为开发往往不是一个人开发)

因此,引入新的解决方案

引入:

  • 我们所创建的每一个函数,解析器都会向函数中添加一个属性prototype(对于函数)

1)这个属性对应一个对象,这个对象就是我们所谓的原型对象

2)如果函数作为普通函数调用prototype没有任何作用

3)当函数以构造函数的形式调用,它所创建的对象也会有一个隐含的属性--------该属性指向构造函数的原型对象(prototype)------我们可以通过__proto__访问到该属性

由同一个构造方法创建的对象的__proto__原型属性指向的是同一个对象

原型对象的作用


原型对象就相当于一个公开的区域,所有一个类的实例都可以反问到这个原型对象,因此我们可以将对象中共有的内容,统一设置在原型对象中,即可解决上面所说的全局函数的问题

注意:当我们访问对象的一个属性或者方法时,它会先在自身中寻找,有则直接使用;如果没有则会去原型对象中查找,找到则直接使用

向原型中添加函数同理,这样便解决上述的定义全局函数污染变量命名空间的问题,如下定义

总结:

以后我们创建构造函数时,可以将这些对象共有的属性和方法,统一添加到构造函数中!这样不用为每一个对象添加,也不会影响全局作用域,就可以使每个对象都具有这个属性和方法了


ps:使用in检查对象中是否含有某个属性时,如果对象中没有,但是原型中有。也会返回true,


相关文章
|
2天前
|
JSON 搜索推荐 API
Python的web框架有哪些?小项目比较推荐哪个?
【10月更文挑战第15天】Python的web框架有哪些?小项目比较推荐哪个?
10 1
|
2天前
|
JavaScript 前端开发 测试技术
JavaScript与TypeScript:为何TypeScript成为大型项目的首选
JavaScript与TypeScript:为何TypeScript成为大型项目的首选
7 1
|
28天前
|
算法 JavaScript 前端开发
第一个算法项目 | JS实现并查集迷宫算法Demo学习
本文是关于使用JavaScript实现并查集迷宫算法的中国象棋demo的学习记录,包括项目运行方法、知识点梳理、代码赏析以及相关CSS样式表文件的介绍。
第一个算法项目 | JS实现并查集迷宫算法Demo学习
|
3天前
|
人工智能 JavaScript 网络安全
ToB项目身份认证AD集成(三完):利用ldap.js实现与windows AD对接实现用户搜索、认证、密码修改等功能 - 以及针对中文转义问题的补丁方法
本文详细介绍了如何使用 `ldapjs` 库在 Node.js 中实现与 Windows AD 的交互,包括用户搜索、身份验证、密码修改和重置等功能。通过创建 `LdapService` 类,提供了与 AD 服务器通信的完整解决方案,同时解决了中文字段在 LDAP 操作中被转义的问题。
|
1月前
vite.config.js中vite.defineConfig is not defined以及创建最新版本的vite项目
本文讨论了在配置Vite项目时遇到的`vite.defineConfig is not defined`错误,这通常是由于缺少必要的导入语句导致的。文章还涉及了如何创建最新版本的Vite项目以及如何处理`configEnv is not defined`的问题。
66 3
vite.config.js中vite.defineConfig is not defined以及创建最新版本的vite项目
|
17天前
|
前端开发 JavaScript API
惊呆了!学会AJAX与Fetch API,你的Python Web项目瞬间高大上!
在Web开发领域,AJAX与Fetch API是提升交互体验的关键技术。AJAX(Asynchronous JavaScript and XML)作为异步通信的先驱,通过XMLHttpRequest对象实现了局部页面更新,提升了应用流畅度。Fetch API则以更现代、简洁的方式处理HTTP请求,基于Promises提供了丰富的功能。当与Python Web框架(如Django、Flask)结合时,这两者能显著增强应用的响应速度和用户体验,使项目更加高效、高大上。
35 2
|
17天前
|
前端开发 JavaScript
基础 JavaScript 实例
基础 JavaScript 实例
13 1
|
5天前
|
存储 JavaScript 前端开发
Vue.js项目中全面解析定义全局变量的常用方法与技巧
Vue.js项目中全面解析定义全局变量的常用方法与技巧
9 0
|
1月前
|
前端开发 Python
前后端分离的进化:Python Web项目中的WebSocket实时通信解决方案
在现代Web开发领域,前后端分离已成为一种主流架构模式,它促进了开发效率、提升了应用的可维护性和可扩展性。随着实时数据交互需求的日益增长,WebSocket作为一种在单个长连接上进行全双工通讯的协议,成为了实现前后端实时通信的理想选择。在Python Web项目中,结合Flask框架与Flask-SocketIO库,我们可以轻松实现WebSocket的实时通信功能。
47 2
|
1月前
|
JavaScript 前端开发
js创建对象| 25
js创建对象| 25