注:本文中部分描述都是操作我的书《JavaScript高级应用与实践》而言,还请朋友们多多支持我的书,详情请见:
博主网站地址:
http://m9m.3322.org/doc/js/md00.jsp
“北京电子工业出版社”地址
http://www.phei.com.cn/bookshop/bookinfo.asp?bookcode=TP061230%20&booktype=main
所谓的“动态扩展模式”是指JavaScript中当一个对象已经实例化后,我们对对象的原型(prototype)上扩展相应的属性(方法也是一种属性,只是类型为function罢了),能够在这个已经实例化的对象上体现(正确访问)的特性叫做“动态扩展模式”。这是许多编程语言所无法比拟的特性——对已经实例的对象原型上扩展方法。
示例如下:
“函数扩展方式”是指通过在Function的原型上定义方法method为将来定义的类的原型上扩展属性的方式。
// 定义为对象原型上扩展属性的方法,这样设计的好处是简化原型扩展的累赘代码
// name:扩展的属性名称(函数也是一种属性),
// funcOrProp:扩展的属性值(可以是函数对象)
Function.prototype.method = function(name, funcOrProp)
{
this.prototype[name] = funcOrProp;
}
var myClass = function(){}; // 或者function myClass(){}
// 显示姓名
myClass.method("displayName", function()
{
alert(this.name);
});
// 显示性别
myClass.method("displaySex", function()
{
alert(this.sex);
});
// 姓名、性别
myClass.method("name", "xiatian");
myClass.method("sex", "male");
// 使用:
var oMy = new myClass();
oMy.displayName();
oMy.displaySex();
// 对象实例化后,给他的原型上扩展方法,
// 依然能在已经实例化对象上正确访问,这就是“动态模式”
// 但是注意,你不能改变已经实例化的对象的原型,
// 例如:oMy.prototype.name = "summer";
// 因为 prototype 只有在类、对象定义时能够使用,
// 实例化对象的prototype是无效的对象,
// 而实例化对象的constructor是可以被重新定义的
// 【oMy.constructor = function(){alert(99)}】,
// 但是已经没有多大的实际意义了
// 当然,这里通过在myClass.prototype. dspAll=function(){…};进行扩展效果也是一样的
myClass.method("dspAll", function()
{
alert([this.name, this.sex].join(","));
});
// 下面能正确访问,这也是本节描述的“动态扩展原型模式”
oMy.dspAll();
分享到:
相关推荐
在JavaScript中,观察者模式广泛用于事件驱动编程,而策略模式和模板方法模式则有助于保持代码的灵活性和可扩展性。 每个模式都有其特定的适用场景和优缺点,通过理解和应用这些模式,开发者可以更好地组织代码,...
JavaScript设计模式是指在软件开发中使用JavaScript语言编写的设计模式。这些设计模式旨在提高代码的重用性、可读性、维护性和扩展性。以下是JavaScript设计模式的知识点总结: 1. 单体模式(Singleton Pattern)...
第一部分讲解了JavaScript语言的面向对象和函数式编程的知识,包括静态类型语言和动态类型语言的区别及其在实现设计模式时的异同、封装、继承、多态在动态类型语言中的体现、JavaScript基于原型继承的面向对象系统的...
5. 发布/订阅模式:这是观察者模式的变体,在此模式中,发布者和订阅者之间不会直接相互调用,而是通过一个中间层进行通信。在前端开发中,这可以用来解耦模块之间的直接依赖关系。 6. 适配器模式:适配器模式允许...
在这个"JavaScript高级与设计模式"的主题中,我们将深入探讨JavaScript的高级特性以及如何在实践中应用设计模式。 首先,让我们关注JavaScript的高级特性。这些特性包括但不限于: 1. **闭包(Closures)**:闭包...
JavaScript设计模式是编程实践中的一种重要概念,它是为了在JavaScript环境中编写更加高效、可维护和可扩展的代码而形成的一套通用解决方案。这个"JavaScript设计模式Demo"可能包含了各种常见的设计模式示例,如单例...
《精通JavaScript设计模式》一书,由Google和Yahoo的专家共同撰写,旨在揭示世界顶尖公司如何利用JavaScript设计模式提升Web应用的效率、可维护性和可扩展性。 书中首先介绍了设计模式的基本概念,阐述了为何在...
书中不仅介绍了JavaScript中经典和现代的设计模式,还包括了针对不同JavaScript开发框架(如MVC、MVP、MVVM)的设计模式,以及最新的模块化JavaScript设计模式(AMD、CommonJS、ES Harmony)和jQuery中的设计模式。...
JavaScript设计模式是编程实践中的一种重要思想,它提供了一套经过时间考验的最佳实践,用来解决常见的编程问题和提高代码的可维护性、可扩展性和可复用性。在JavaScript这种动态类型的脚本语言中,设计模式尤其重要...
在JavaScript中,由于其特殊的原型继承机制和动态类型特性,设计模式的应用有一些独特的特点。 ### 1. 继承机制 在JavaScript中,继承主要通过原型链(Prototype Chain)实现。每个对象都有一个`__proto__`属性,...
在JavaScript中,由于其独特的原型继承和动态类型,理解并运用设计模式能帮助开发者编写更高效、更易于维护的代码。 二、基本技巧 这部分可能涵盖变量作用域、闭包、异步编程(如回调函数、Promise、async/await)...
《Pro JavaScript Design Patterns》中涵盖了多种常见的设计模式,旨在提高代码的可维护性和可扩展性。 1. **工厂模式**:提供了一个创建对象的接口,但允许子类决定实例化哪一个类。这种模式可以避免直接使用`new`...
面向对象编程(Object-Oriented Programming, OOP)是JavaScript中的核心概念,而设计模式则是解决常见编程问题的经验总结,对于提升代码质量和可维护性至关重要。这两本书——"JavaScript 面向对象编程.pdf"和...
在JavaScript中,这种模式尤其有用,因为JavaScript是动态类型的,允许我们在程序运行时轻松地更改对象的属性和行为。下面我们将深入探讨策略模式的概念、工作原理以及如何在JavaScript中实现。 策略模式的核心思想...
总结,通过JavaScript结合正则表达式和浏览器扩展API,我们可以实现基于模式的URL重定向功能,这不仅提高了用户体验,也有助于优化网站导航。了解这些知识点后,开发者可以根据需求创建出灵活、自定义化的URL重定向...
在IT领域,《JavaScript Patterns》是一本备受推崇的专业书籍,它深入探讨了JavaScript编程中的各种设计模式与最佳实践。本书由才华横溢的Stoyan Stefanov撰写,并由知名的O'Reilly Media出版社出版。这本书不仅对...
为了解决这个问题,一些开发者创建了库,如压缩包中的"match-master",它提供了一种扩展JavaScript语法的方法,使得模式匹配成为可能。这些库通常使用元编程技术,如函数式编程中的高阶函数,来实现自定义的匹配逻辑...
在这个模式中,`TamePerson`函数创建私有变量并返回一个包含公开方法的新对象,避免了外部访问私有数据。 以上四种模式都是JavaScript面向对象编程的不同策略,每种都有其适用的场景和优势。理解并熟练运用这些...
"函数式编程"也是JavaScript设计模式中的一个重要概念,它鼓励使用无副作用的纯函数和高阶函数,减少代码耦合,提高可读性和可测试性。"柯里化"和"偏函数"是函数式编程中的两种技术,它们可以提升函数的灵活性和重用...
在这个讲解中,我们将深入探讨JavaScript中的OOP模式,特别是如何利用它来进行DOM操作。 在JavaScript中,OOP主要基于原型(prototype)实现,与传统的类继承机制不同。JavaScript提供了构造函数、原型对象、实例、...