参考: 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. WEB网站的favicon.ico的设置

    一.什么是favicon.ico Favicon是Favorites Icon的缩写,favicon.ico是指显示在浏览器收藏夹和地址栏网站网址前面的个性化图标,常被成为网页小图标.网站缩略图标或者 ...

  2. 常见的nosql数据库有哪些?以及他们的特点与区别?

    一.常见的nosql 二.Redis,Memcache,MongoDb的特点 (1).Redis 优点: 1.支持多种数据结构,如 string(字符串). list(双向链表).dict(hash表 ...

  3. SMO算法--SVM(3)

    SMO算法--SVM(3) 利用SMO算法解决这个问题: SMO算法的基本思路: SMO算法是一种启发式的算法(别管启发式这个术语, 感兴趣可了解), 如果所有变量的解都满足最优化的KKT条件, 那么 ...

  4. python文件读写 文件修改

    #设置一个变量f为文件对象,并打开文件#写文件#f = open('user.txt','w',encoding='utf-8') #f是一个文件对象f=open(r'c:\Users\PL\Desk ...

  5. Invalid package name:a digit canno be the first character in a package segme

    发现网上没有关于这个的解决方法 其实这个原因是因为下图红框里的是数字 把默认的这个直接删掉,用英语随便输入一个即可

  6. 黑马eesy_15 Vue:03.生命周期与ajax异步请求

    黑马eesy_15 Vue:02.常用语法 黑马eesy_15 Vue:03.生命周期 黑马eesy_15 Vue:04.Vue案例(ssm环境搭建) vue的生命周期与ajax异步请求 1.Vue的 ...

  7. 前端框架Bootstrap(10.7国庆补写)

    框架的官网地址:https://v3.bootcss.com/ 主要学习Bootstrap框架提供的样式.组件.插件的使用. 首先下载到本地,在项目中导入使用: 下载的文件中包含:min.css的是压 ...

  8. linux 添加常用长命令别名

    ## 设置linux下常用命令别名,提高效率 将要使用的命令别名写入到~/.bashrc文件,通过source ~/.bashrc命令使变更生效 alias sst='systemctl status ...

  9. 量化投资_MATLAB在时间序列建模预测及程序代码

    1 ARMA时间序列机器特性 下面介绍一种重要的平稳时间序列——ARMA时间序列. ARMA时间序列分为三种: AR模型,auto regressiv model MA模型,moving averag ...

  10. Linux平台下_tomcat的安装与优化

    一.Tomcat介绍 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选.对于一 ...