要想理解closure,最好是写一些代码,或是看一些例子。Closure提供了封装(encapsulation)
function
myClosure(){
var date = new Date();
//nested function
return function(){
return date.getMilliseconds();
}
}
即使是当myClosure中的匿名函数(closure)返回,但是date变量仍然驻留在内存中,而不想普通的函数执行完成后就被garbage collection回收了。这里把myClosure看作是一个容器,而date和nested function被看做是这个容器中的元素。
另外一种实现方式:
var myClosure2 =
function(){
var date = new Date();
var myNestedFunc = function(){
return date.getMilliseconds();
}
return {// revealing modular pattern
foo: myNestedFunc
}
}
var bar = new
myClosure2();
console.log(bar.foo());
定义变量?
标准方式定义变量
var str = “Hello World”;
如果定义多个变量的话,可以采用:
var str1 = ‘hello’,
str2 = ‘world’,
str3 = ‘foo bar’;
改写上面的:
var myClosure2 =
function(){
var date = new Date();
var myNestedFunc = function(){
return date.getMilliseconds();
}//这里JSLint会给出警告,并且显得var定义使用了多次
return {// revealing modular pattern
foo: myNestedFunc
}
}
改写:
var myClosure2 =
function(){
var date = new Date(),
var1 = 5,
myNestedFunc = function(){
return
date.getMilliseconds();
};
return {// revealing modular pattern
foo: myNestedFunc
}
}
Prototype Pattern
优点:
<!--[if !supportLists]-->l <!--[endif]-->充分利用JavaScript内建特性
<!--[if !supportLists]-->l <!--[endif]-->“Modularize”代码为了构建可重用代码
<!--[if !supportLists]-->l <!--[endif]-->让变量和函数脱离全局作用域
<!--[if !supportLists]-->l <!--[endif]-->函数在内存中只加载一次
<!--[if !supportLists]-->l <!--[endif]-->通过prototype可能override函数
缺点:
<!--[if !supportLists]-->l <!--[endif]-->this指针很容易混淆
<!--[if !supportLists]-->l <!--[endif]-->Constructor脱离prototype定义
Prototype pattern结构
var Calculator =
function(eq){//定义一个对象
this.eqCtl = document.getElementById(eq);
}
Calculator.prototype
= {//扩展对象原型链上的方法
add: function(x, y){//封装,不污染全局作用域
var val = x + y;
this.eqCtl.innerHTML = val;
}
}
var calc = new Calculator(‘eqCtl’);
calc.add(2,2);
Prototype Pattern一般用在实现一个类的功能,这个类中有一些属性和操作,这些操作要访问这些属性的值,定义函数对象(可以理解为类的模板)时就是初始化属性值,然后通过原型链来定义操作,这些操作是针对所有后期被实例化的对象,这些操作只被内存加载一次,但是个个实例化对象的属性都是独占内存的。
<!--EndFragment-->
分享到:
相关推荐
第一部分讲解了JavaScript语言的面向对象和函数式编程的知识,包括静态类型语言和动态类型语言的区别及其在实现设计模式时的异同、封装、继承、多态在动态类型语言中的体现、JavaScript基于原型继承的面向对象系统的...
JavaScript设计模式.pdf JavaScript设计模式是指在软件开发中使用JavaScript语言编写的设计模式。这些设计模式旨在提高代码的重用性、可读性、维护性和扩展性。以下是JavaScript设计模式的知识点总结: 1. 单体...
在现代前端开发中,JavaScript设计模式已经成为了一门必修课程。它不仅能够提升开发者的编码效率,而且还能保证编写的代码更加健壮、可维护。本文将对JavaScript设计模式的核心概念进行深入探讨,以期帮助开发者更好...
JavaScript设计模式是编程实践中的一种重要思想,它提供了一套经过时间考验的最佳实践,用来解决常见的编程问题和提高代码的可维护性、可扩展性和可复用性。在JavaScript这种动态类型的脚本语言中,设计模式尤其重要...
面向对象编程(Object-Oriented Programming, OOP)是JavaScript中的核心概念,而设计模式则是解决常见编程问题的经验总结,对于提升代码质量和可维护性至关重要。这两本书——"JavaScript 面向对象编程.pdf"和...
外文翻译:学用JavaScript设计模式,pdf版本,中文版 设计模式是可重用的用于解决软件设计中一般问题的方案。设计模式如此让人着迷,以至在任何编程语言中都有对其进行的探索。 其中一个原因是它可以让我们站在巨人...
在深入探讨《JavaScript设计模式系统讲解与应用》的内容之前,我们先来了解一下设计模式的基本概念以及为什么它对于前端开发人员尤为重要。设计模式是一套被反复使用的、经过分类编目的、包含结构化的解决方案,用于...
包括面向对象,面向对象编程思想,javascript面向对象,设计模式通俗版,快速进入模式学习与实践。
JavaScript中的原型模式是一种实现面向对象编程(OOP)的关键机制,它基于原型继承,使得对象可以从其他对象那里获得属性和方法。在这个模式下,每个函数都有一个`prototype`属性,这个属性是一个对象,用于共享属性...
JavaScript设计模式是编程实践中一种优秀的代码组织方式,它总结了在特定场景下解决常见问题的最佳实践。构造函数模式是JavaScript中的一种重要设计模式,用于创建对象。本文将深入探讨构造函数模式及其应用。 构造...
Javascript 设计模式系统讲解与应用视频资源地址.txt
JavaScript设计模式与开发实践是深入理解并提升JavaScript编程能力的关键领域。设计模式是对在软件设计中经常出现的问题的解决方案的描述,它代表了最佳实践,是经验丰富的开发者们经过时间检验后总结出来的解决常见...
JavaScript设计模式是编程实践中的一种重要思想,它提供了一套经过时间考验的最佳实践,用来解决常见的编程问题和提高代码的可维护性、可扩展性和可复用性。在本《JavaScript设计模式》课程的源码中,我们可以深入...
在JavaScript中,设计模式的学习和应用能够帮助开发者利用这门语言的特性,编写出更加模块化、易于维护和复用的代码。 具体到JavaScript设计模式,有多种类型可以利用,包括: 1. 构造器模式:通过构造函数创建...
javascript设计模式JavaScript 模式《JavaScript模式》中译本-《JavaScript模式》作者Stoyan Stefanov拔赤偷懒是程序员的优质品质,模式抢先大家总结的偷懒招式。Stoyan Stefanov的这本书,从JavaScript的实际使用...
在JavaScript中,由于其独特的原型继承和动态类型,理解并运用设计模式能帮助开发者编写更高效、更易于维护的代码。 二、基本技巧 这部分可能涵盖变量作用域、闭包、异步编程(如回调函数、Promise、async/await)...
这部分重点讨论了JavaScript的动态类型特性,如封装、继承、多态,并详细阐述了基于原型继承的面向对象系统的工作原理,为后续学习设计模式打下坚实基础。 第二部分是书中的核心内容,作者通过逐步完善示例代码的...