在js中,如果你想输入一个的信息,例如姓名,性别,年龄等,如果你用值类型来存储的话,那么你就必须要声明很多个变量才行,变量声明的多了的话,就会造成变量污染。所以最好的方式就是存储到对象中。下面能我就给大家介绍几种创建对象的方式,并且给大家说一下他们的优缺点

方式一:对象字面量

var obj={name:"赵云",type:"突进",skill:"抢人头"}

缺点:只能创建一次对象,复用性较差,如果要创建多个对象,代码冗余度太高

方式二:使用内置构造函数

var obj=new Object();obj.name="李白";obj.type="刺客";obj.skill="舞剑";

缺点:只能创建一次对象,复用性较差,如果要创建多个对象,代码冗余度太高

方式三:工厂模式(不推荐使用)

function creat(name,type,skill){var obj=new Object();obj.name=name;obj.type=type;obj.skill=skill;obj.say=function(){console.log("黄河之水天上来");}return obj;}var hero=creat("李白","刺客","写诗");var heroNext=creat("赵云","突进","将军");

缺点:对象无法识别,因为所有的实例都指向一个原型

方法四:构造函数模式

function Person(singer,song,type){//默认吧this传给new出来的对象,并且默认是返回该对象this.singer=singer;this.song=song;this.type=type;}var obj=new Person("田馥甄","小幸运","流行歌");console.log(obj);

注意点:1.如果不写返回值,默认返回的是新创建出来的对象 (一般都不会去写这个return语句)

     2.如果我们自己写return语句 return的是空值(return;),或者是基本类型的值或者null,都会默认返回新创建出来的对象

     3.如果返回的是object类型的值,将不会返回刚才新创建的对象,取而代之的是return后面的值

优点:实例时可以识别为一个特定的类型

缺点:构造函数中定义函数,那么每次创建对象,都会重新创建该函数,这样会导致全局变量增多,造成污染,代码结构会混乱,不易维护

方法五:原型

 function Person(name, age, gender) {this.name = name;this.age = age;this.gender = gender;}var p =new Person("张学友",18,"male");var p1 = new Person("刘德华",19,"male");Person.prototype.sayHello = function () {console.log("你好我是" + this.name);}Person.prototype["sing"] = function () {console.log("一千个伤心的母牛");}p.sayHello();p1.sayHello();p.sing();p1.sing();

优点:说明:构造函数的原型对象中的成员,可以被该构造函数创建出来的所有对象访问,而且,所有的对象共享该对象,所以,我们可以将构造函数中需要创建的函数,放到原型对象中存储,这样就解决 全局变量污染的问题 以及 代码结构混乱的问题

缺点:不能初始化参数

转载于:https://www.cnblogs.com/cythia/p/6958021.html

js创建对象的多种方式及优缺点相关推荐

  1. 创建对象的多种方式以及优缺点

    写在前面 这篇文章讲解创建对象的各种方式,以及优缺点. 但是注意: 这篇文章更像是笔记,因为<JavaScript高级程序设计>写得真是太好了! 1. 工厂模式 function crea ...

  2. vue引用js文件的多种方式

    本文主要介绍了vue引用js文件的多种方式,本文大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下 1.vue-cli webpack全局引入jquery (1) 首先 npm inst ...

  3. vue引用js文件的多种方式(推荐)

    vue引用js文件的多种方式(推荐) Day_by_day93 这篇文章主要介绍了vue引用js文件的多种方式,本文大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下 1.vue-cli ...

  4. JavaScript继承的多种方式和优缺点

    1.原型链继承 function Parent () {this.name = '张三'; }Parent.prototype.getName = function () {console.log(t ...

  5. JS遍历数组的多种方式

    JS遍历数组的多种方式 1. 普通for循环 for (let i = 0; i < arr.length; i++){//code} 应用最为普遍的循环写法,性能好,可读性好. 2. 优化版f ...

  6. js小学生图区_多种方式实现js图片预览

    js多种方式图片预览-持续更新 //设置自己的变量存储区 var Util = { file : $("#file"), image_show:$("#img_show& ...

  7. 【JS】——数组拼接的多种方式包括ES6写法

    1. 前言 很多时候的我们需要进行数组的拼接,再此就整理了js的数组多种拼接方式. 2. 数据准备 需要拼接的数组,简单例子 let num = [1,2,3]; let numTemp = [3,3 ...

  8. TS学习笔记04 JS创建对象的方式

    TS学习笔记04 JS创建对象的方式 ​ 首先我们回顾下JS中创建对象的方式 ​ 比如说我按照下面的创建了两个对象分别为stu1和stu2,比如说我现在想给这两个对象都添加一个新的方法,但是这两个对象 ...

  9. 蓝鸥原生JS:js的历史及JavaScript的优缺点

    蓝鸥原生JS:js的历史及JavaScript的优缺点 蓝鸥零基础学习HTML5-html+css基础 http://11824614.blog.51cto.com/11814614/1852769 ...

  10. JavaScript中的几种继承方式及优缺点,你知道多少呢?

    原文连接:JavaScript中的几种继承方式及优缺点,你知道多少呢? 继承也是前端里面的重要的一个知识点,在实际工作中或者面试中也会经常的遇到,那么通过这篇文章我们详细的了解一下继承的几种方式以及各 ...

最新文章

  1. 针对JavaScript的常用事件、对象捕获和使用技巧
  2. LA 5717枚举+最小生成树回路性质
  3. 【网络安全】什么是应急响应,应急响应中你到底该关注哪些指标?
  4. div+css的布局方式进行设计成品作业_原创响应式php企业成品网站,清晰风格版
  5. SQL Server远程部署
  6. 参加ISCC2019线下赛感悟
  7. java线性表合并_单链表的合并(Java实现)
  8. java8 streams_Java 8 Streams API:对流进行分组和分区
  9. USACO-Section1.4 Wormholes(枚举法)
  10. python3.6 try except,python中try except处理程序异常的三种常用方法
  11. selenium对浏览器属性操作的方法
  12. Promise面试题
  13. 面试被问项目上线没_从面试官角度谈观察到的程序员技能瓶颈
  14. mysql数据库rpm包安装_Linux rpm包安装MySQL数据库问题总结
  15. Thinkpad x200 X201拆机换风扇教程 实图
  16. 求闰年的c语言程序函数,c语言闰年(闰年的算法c语言程序)
  17. 谷歌浏览器不兼容websocket的wss协议_为什么程序员都喜欢用Chrome浏览器?
  18. 15000cd是多少流明_将lm换算为cd·sr (流明换算为cd·sr)
  19. 关键字深度剖析,集齐所有关键字可召唤神龙?【二】
  20. Quokka.js and Wallaby.js Crack

热门文章

  1. jmeter 线程执行顺序_JMeter基础之--元件的作用域与执行顺序
  2. 都昌时间轴控件功能说明
  3. [ROS-Beginner]1.安装与配置ROS环境
  4. port 执行命令的封装和参数详解
  5. Chart.js报告
  6. 网络通信之通过get/post方式提交参数给web应用
  7. jcseg 1.7.2 版发布了
  8. python中字典dictionary详解及基本使用
  9. 并行程序设计---cuda memory
  10. Mybatis源码概览(一)