参考: javascript 高级程序设计第三版

工厂模式

1
2
3
4
5
6
7
8
9
10
function (name) {
var obj = new Object()
obj.name = name
obj.getName = function() {
console.log(this.name)
}
return obj
} var person1 = createPerson('jack')
  • 缺点:对象无法识别,所有实例都指向同一个原型

构造函数模式

1
2
3
4
5
6
7
function Person(name) {
this.name = name
this.getName = function() {
console.log(this.name)
}
}
var person1 = new Person('jack')
  • 优点:实例可以识别为一个特定类型
  • 缺点:每次创建实例时候,每个方法都会被创建一次

构造函数模式优化

1
2
3
4
5
6
7
8
9
10
function Person(name) {
this.name = name
this.getName = getName
} function getName() {
console.log(this.name)
} var person1 = new Person('jack')
  • 优点:解决每个方法都会被重新创建的问题
  • 缺点:没有很好的封装性

原型模式

1
2
3
4
5
6
7
8
9
function Person(name) {
} Person.prototype.name = 'jack'
Person.prototype.getName() {
console.log(this.name)
} var person1 = new Person('jack')
  • 优点:方法不会重新创建
  • 缺点:所有属性和方法都给共享;不能初始化参数

原型模式优化

1
2
3
4
5
6
7
8
9
10
大专栏  js 创建对象的多种方式>11
function Person(name) {
} Person.prototype = {
name: 'jack',
getName: function() {
console.log(this.name)
}
} var person1 = new Person('jack')
  • 缺点:重新了原型,丢失了 constructor 属性

原型模式优化

1
2
3
4
5
6
7
8
9
10
11
12
function Person(name) {
} Person.prototype = {
constructor: Person,
name: 'jack',
getName: function() {
console.log(this.name)
}
} var person1 = new Person('jack')
  • 优点: 实例可以通过 constructor 属性找到所属构造函数
  • 缺点: 还是存在原型模式的缺点

组合模式(构造函数模式和原型模式结合)

1
2
3
4
5
6
7
8
9
10
11
12
function Person(name) {
this.name = name
} Person.prototype = {
constructor: Person,
getName: function() {
console.log(this.name)
}
} var person1 = new Person('jack')
  • 优点:该共享的共享,该私有的私有

寄生构造函数模式

1
2
3
4
5
6
7
8
9
10
11
12
13
function Person(name) {
var obj = new Object()
obj.name = name
obj.getName = function () {
console.log(this.name)
} return obj
} var person1 = new Person('jack');
console.log(person1 instanceof Person)
console.log(person1 instanceof Object) // true
  • 缺点:对象无法识别,所有实例都指向同一个原型,本质还是工厂模式

js 创建对象的多种方式的更多相关文章

  1. 基础2:js创建对象的多种方式

    js创建对象的多种方式 1. 工厂模式 function createPerson(name) { var o = new Object() 0.name = name return o } var ...

  2. js创建对象的多种方式及优缺点

    在js中,如果你想输入一个的信息,例如姓名,性别,年龄等,如果你用值类型来存储的话,那么你就必须要声明很多个变量才行,变量声明的多了的话,就会造成变量污染.所以最好的方式就是存储到对象中.下面能我就给 ...

  3. HTML系列:js和css多种方式实现隔行变色

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. Javascript深入之创建对象的多种方式以及优缺点

    1.工厂模式 function createPerson(name) { var o = new Object(); o.name = name; o.getName = function() { c ...

  5. js创建对象的最佳方式

    1.对象的定义 ECMAScript中,对象是一个无序属性集,这里的“属性”可以是基本值.对象或者函数 2.数据属性与访问器属性 数据属性即有值的属性,可以设置属性只读.不可删除.不可枚举等等 访问器 ...

  6. javascript(js)创建对象的模式与继承的几种方式

    1.js创建对象的几种方式 工厂模式 为什么会产生工厂模式,原因是使用同一个接口创建很多对象,会产生大量的重复代码,为了解决这个问题,产生了工厂模式. function createPerson(na ...

  7. JS创建对象的方式有几种

    相信但凡作为一个前端工程师,都被面试到过这个面试题目,HR考察的就是对oop思想的理解. 作为一个从后端转过来的怂逼,oop一直是心中的永远的痛啊. 这几天一直在通读js高级程序设计,重复理解js创建 ...

  8. 基础3:js实现继承的多种方式

    js实现继承的多种方式 1. 原型链继承 function Parent() { this.name = 'xwk' } Parent.prototype.getName = function() { ...

  9. JS创建对象的方式

    1.采用直接量创建方式:系统会使用new方式自动创建对象 var o = {x:1,y:2,z:2}; 2.采用new关键字创建对象:采用构造函数创建对象 var o = new Object();/ ...

随机推荐

  1. 03 Mybatis:01.Mybatis课程介绍及环境搭建&&02.Mybatis入门案例

    mybatis框架共四天第一天:mybatis入门 mybatis的概述 mybatis的环境搭建 mybatis入门案例 -------------------------------------- ...

  2. Ubuntu--- 安装VMware 报错 Build enviroment error!

    今天从 Ubuntu 安装 VMware 下载并安装过程都很顺利,但是在启动过程中报错误,所以总结如下: 报错原因:VMware 第一次启动需要编译一些模块,但是刚开始并没有安装 gcc 所以便报无法 ...

  3. v-charts使用总结(随时补充)

    柱状图.折线图.环图的常用配置(配置连接地址https://v-charts.js.org/#/line) :data 绑定基本数据 { // 第一个参数为维度(就是横轴,例如时间),剩余为指标(就是 ...

  4. redis day03 下

    事务 能够有回退状态 事务命令 安命令执行没问题,redis是弱事务型 nulti incr n1   -->QUEUED(返回仅队列了) EXEC -->返回结果 pipeline 流水 ...

  5. 题解-------CF235B Let's Play Osu!

    传送门 题目大意 求出总得分的期望值. 思路 还没有学习数学期望的小朋友赶紧去学一下数学期望,这里只提供公式: $E\left ( x \right )=\sum_{k=1}^{\infty }x_{ ...

  6. apt GPG error

    W: GPG error: http://extras.ubuntu.com trusty Release: The following signatures couldn't be verified ...

  7. vue结合element实现自定义上传图片、文件

    参考了很多文献,感谢各位帖子,所以也想把自己遇到不会的东西分享出来,菜鸟一枚大家一进步!

  8. 关于 Xpath 定位

    关于 Xpath 定位 问: // 和 / 的区别 表达式 描述 nodename 选取此节点的所有子节点. / 从根节点选取. // 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置. . ...

  9. (转)Navicat Premium 12.1.8.0安装与激活

    http://www.mamicode.com/info-detail-2493067.html

  10. 关于Java中注解的总结

    注解用来给类声明附加额外信息,可以标注在类.字段.方法等上面,编译器.JVM以及开发人员等都可以通过反射拿到注解信息,进而做一些相关处理 Java中注解的知识结构图 常用注解 @Override   ...