JavaScript设计模式
2015-11-03 18:54
721 查看
原文地址:https://github.com/vino24/blog/issues/88
缺陷:
创建很多对象时,会产生大量重复代码
抽象出创建具体对象的过程,在JavaScript中以函数来封装特定接口创建对象的细节。
缺陷:
没有解决对象识别的问题
· 构造函数模式与工厂模式区别:
没有显式的创建对象
直接将属性方法赋值给了this对象
没有return语句
将构造函数的作用于赋值给新对象(this便指向了新对象)
执行构造函数中的代码(为新对象添加属性)
返回新对象
· 缺陷:
构造函数中的方法都要在每个实例上创建一遍
缺陷:
所有的实例都会共享其属性和方法
构造函数用于定义实例属性,而原型模式用于定义方法和共享属性
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); }; } }
相关文章推荐
- jsp界面双击查询明细,主键提交自动加点
- js对汉字首字母排序
- jsp与后台传值
- jsp 笔记
- [转]JSP或servlet中(以及上传下载文件)中文乱码或不显示的解决方案
- jsp四大内置对象
- JavaScript学习日记5 map和set
- js常用正则表达式
- javascript作用域(整合)
- 代码段:js表单提交检测
- 【详解】Python接收json数据联合java代码解密
- 实现JS复制、粘贴,Chrome/Firefox下可用
- js动画笔记
- js中json字符串转换成json对象
- jsp页面全选操作
- 统一的Json组件和csv下载组件
- 彻底理解JavaScript原型
- json字符串转换为对象,json字符串中含数组
- JavaScript函数,语法,定义方式
- javascript 模块化编程 1