博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript设计模式
阅读量:4685 次
发布时间:2019-06-09

本文共 1704 字,大约阅读时间需要 5 分钟。

原文地址:https://github.com/vino24/blog/issues/88

1. 最初

var person = new Object();person.name = "vino24";person.age = 22;person.job = "FE Engineer";person.sayName = function() {    alert(this.name);}
缺陷:

创建很多对象时,会产生大量重复代码

2. 工厂模式

抽象出创建具体对象的过程,在JavaScript中以函数来封装特定接口创建对象的细节。

function createPerson(name,age,job) {var o= new Object();o.name = name;o.age = age;o.job = job;o.sayName = function() {    alert(this.name);};return o;}var person1=createPerson("vino24",22,"FE");person1.sayName();
缺陷:

没有解决对象识别的问题

3. 构造函数模式

function Person(name,age,job) {    this.name = name;    this.age = age;    this.job = job;    this.sayName=function() {        alert(this.name);    };} var person1 = new Person("vino24",22,"FE");person1.sayName();
· 构造函数模式与工厂模式区别:
  • 没有显式的创建对象
  • 直接将属性方法赋值给了this对象
  • 没有return语句

使用new操作符创建对象的过程:

  • 创建一个新对象
  • 将构造函数的作用于赋值给新对象(this便指向了新对象)
  • 执行构造函数中的代码(为新对象添加属性)
  • 返回新对象
· 缺陷:

构造函数中的方法都要在每个实例上创建一遍

4.原型模式

function Person() {}Person.prototype = {constructor:Person,name:"vino24",age:22;job:"FE",sayName:function() {    alert(this.name);    }};var person1=new Person();Person.sayName();
缺陷:

所有的实例都会共享其属性和方法

5.组合使用构造函数模式和原型模式

构造函数用于定义实例属性,而原型模式用于定义方法和共享属性

function Person(name,age,job) {    this.name = name;    this.age = age;    this.job = job;    this.friends = ["vino","kobe"];}Person.prototype = {    constructor : Person,    sayName : function() {        alert(this.name);    }}var Person1 = new Person("vino24",22,"FE");

6.动态原型模式

function Person(name,age,job) {    this.name = name;    this.age = age;    this.job = job;    if(typeof this.sayName != "function") {        Person.prototype.sayName = function() {            alert(this.name);        };    }}
 
 

转载于:https://www.cnblogs.com/zoumiaomiao/p/4934055.html

你可能感兴趣的文章
Spring事务
查看>>
java编程基础(三)流程控制语句
查看>>
让数据库跑的更快的7个MySQL优化建议
查看>>
jquery 取id模糊查询
查看>>
解决在vue中,自用mask模态框出来后,下层的元素依旧可以滑动的问题
查看>>
修改node节点名称
查看>>
Java 文件下载
查看>>
图论——读书笔记 (深度优先搜索)
查看>>
PAT(B) 1014 福尔摩斯的约会(Java)
查看>>
PAT甲级题解-1123. Is It a Complete AVL Tree (30)-AVL树+满二叉树
查看>>
不要过早追求通用
查看>>
带ifrmae的弹窗
查看>>
20172310 2017-2018《程序设计与数据结构》(下)第二周学习总结
查看>>
C#中webBrowser加载页面中的不同域的iFrame的源代码的取得
查看>>
iOS/Android 微信及浏览器中唤起本地APP
查看>>
[Usaco2005 nov]Grazing on the Run 边跑边吃草 BZOJ1742
查看>>
flex中dragdrop不响应的原因
查看>>
.Net学习笔记----2015-07-08(基础复习和练习01)
查看>>
1#Two Sum(qsort用法)
查看>>
Spark 各个组件关系
查看>>