继承
父类
/* Class Person. */
function Person(name) {
this.name = name;
}
Person.prototype.getName = function() {
return this.name;
}
var reader = new Person('John Smith');
reader.getName();
1、原型链
/* Class Author. */
function Author(name, books) {
Person.call(this, name); // Call the superclass' constructor in the scope of this.
this.books = books; // Add an attribute to Author.
}
Author.prototype = new Person(); // Set up the prototype chain.
Author.prototype.constructor = Author; // Set the constructor attribute to Author.
Author.prototype.getBooks = function() { // Add a method to Author.
return this.books;
};
var author = [];
author[0] = new Author('Dustin Diaz', ['JavaScript Design Patterns']);
author[1] = new Author('Ross Harmes', ['JavaScript Design Patterns']);
author[1].getName();
author[1].getBooks();
2、extend函数
将派生子类的整个过程包装在一个名为extend的函数中。
/* Extend function. */
function extend(subClass, superClass) {
var F = function() {};
F.prototype = superClass.prototype;
subClass.prototype = new F();
subClass.prototype.constructor = subClass;
}
/* Class Author. */
function Author(name, books) {
Person.call(this, name);
this.books = books;
}
extend(Author, Person);
Author.prototype.getBooks = function() {
return this.books;
};
改进后代码:
/* Extend function, improved. */
function extend(subClass, superClass) {
var F = function() {};
F.prototype = superClass.prototype;
subClass.prototype = new F();
subClass.prototype.constructor = subClass;
subClass.superclass = superClass.prototype;
if(superClass.prototype.constructor == Object.prototype.constructor) {
superClass.prototype.constructor = superClass;
}
}
/* Class Author. */
function Author(name, books) {
Author.superclass.constructor.call(this, name);
this.books = books;
}
extend(Author, Person);
Author.prototype.getBooks = function() {
return this.books;
};
Author.prototype.getName = function() {
var name = Author.superclass.getName.call(this);
return name + ', Author of ' + this.getBooks().join(', ');
};
3、掺元类
/* Mixin class. */
var Mixin = function() {};
Mixin.prototype = {
serialize: function() {
var output = [];
for(key in this) {
output.push(key + ': ' + this[key]);
}
return output.join(', ');
}
};
augment(Author, Mixin);
var author = new Author('Ross Harmes', ['JavaScript Design Patterns']);
var serializedString = author.serialize();
/* Augment function. */
function augment(receivingClass, givingClass) {
for(methodName in givingClass.prototype) {
if(!receivingClass.prototype[methodName]) {
receivingClass.prototype[methodName] = givingClass.prototype[methodName];
}
}
}
/* Augment function, improved. */
function augment(receivingClass, givingClass) {
if(arguments[2]) { // Only give certain methods.
for(var i = 2, len = arguments.length; i < len; i++) {
receivingClass.prototype[arguments[i]] = givingClass.prototype[arguments[i]];
}
}
else { // Give all methods.
for(methodName in givingClass.prototype) {
if(!receivingClass.prototype[methodName]) {
receivingClass.prototype[methodName] = givingClass.prototype[methodName];
}
}
}
}
继承 耗费内存一些
原型 set 和 get 注意要统一
掺元 扩展类
分享到:
相关推荐
因此,通过学习JavaScript设计模式,Web开发人员能够更好地组织代码,写出更加健壮且易于维护的JavaScript应用程序。 《Javascript 设计模式》电子书深入讲解了JavaScript开发原理以及在客户端脚本开发中的设计模式...
### JavaScript设计模式经典知识点概述 #### 一、书籍简介与背景 《Pro JavaScript Design Patterns》是一本关于JavaScript设计模式的经典著作,由Ross Harmes和Dustin Diaz共同编写,并于2008年出版。该书深入浅出...
### 常用的Javascript设计模式 #### 一、单例模式详解 单例模式是一种常用的软件设计模式,它的核心思想在于确保一个类只有一个实例,并提供一个全局访问点。这种模式在JavaScript这样的“无类”语言中尤为重要。...
JavaScript设计模式是编程实践中的一种重要思想,它提供了一套经过时间考验的最佳实践,用来解决常见的编程问题和提高代码的可维护性、可扩展性和可复用性。在JavaScript这种动态类型的脚本语言中,设计模式尤其重要...
- **第4章:组合**:讲解了组合模式的概念及其在JavaScript中的应用。 - **第5章:模块模式**:介绍了一种用于创建私有作用域和公有API的强大模式——模块模式。 - **第6章:工厂模式**:阐述了如何使用工厂模式来...
第4章 函数 背景 回调模式 返回函数 自定义函数 即时函数 即时对象初始化 初始化时分支 函数属性——备忘模式 配置对象 Curry 小结 第5章 对象创建模式 命名空间模式 声明依赖关系 ...
具体到JavaScript设计模式,有多种类型可以利用,包括: 1. 构造器模式:通过构造函数创建对象,并通过new操作符实例化对象。 2. 模块化模式:这是一种封装和组织代码的方式,通过立即执行函数表达式(IIFE)创建...
JavaScript设计模式中的继承机制是其面向对象编程的重要组成部分。继承允许子类继承父类的属性和方法,从而减少代码重复并提高代码复用性。在JavaScript中,继承并不像Java或C++等语言那样简单地使用一个关键字,...
这种继承方式被称为原型链继承,是JavaScript中最常见的继承模式。然而,它也有一些缺点,比如当父类的属性或方法被多个子类共享时,会创建多个副本,占用额外的内存。 为了避免这些问题,还可以采用其他继承策略,...
JavaScript设计模式中的封装和信息隐藏是面向对象编程中至关重要的概念。封装是将对象的内部状态(数据)和行为(方法)结合在一起,对外提供一个有限的接口进行交互,以此来保护内部数据的完整性和安全性。信息隐藏...
第4章 业务逻辑层:组织 4.1 理解业务组织模式 4.1.1 Transaction Script 4.1.2 Active Record 4.1.3 Domain Model 4.1.4 Anemic Domain Model 4.1.5 领域驱动设计 4.2 小结 第5章 业务逻辑层:模式 5.1 ...
**JavaScript设计模式之代理模式详解** 代理模式是一种在软件设计中常见的模式,它允许我们创建一个代表原始对象的代理对象,以控制对原始对象的访问。代理对象可以在调用实际对象的方法之前或之后添加额外的功能,...
适配器模式是一种软件设计模式,它允许两个不兼容的接口之间进行通信。在JavaScript编程中,这种模式尤其适用于处理不同API之间的兼容性问题,比如在AJAX请求中,需要对接不同的日志记录系统,或者整合第三方库时。...
《JavaScript高级程序设计》是JavaScript编程领域的一本经典著作,其第四版更是涵盖了现代JavaScript的诸多新特性。这本书深入探讨了JavaScript的核心概念、语法以及在Web开发中的应用,旨在帮助开发者提升...
第4章 函数 背景 回调模式 返回函数 自定义函数 即时函数 即时对象初始化 初始化时分支 函数属性——备忘模式 配置对象 Curry 小结 第5章 对象创建模式 命名空间模式 声明依赖关系 私有属性和方法 模块模式 沙箱模式...
通过以上分析可以看出,《JavaScript王者归来》第一章从多个角度深入探讨了JavaScript的选择理由、应用场景以及合理使用的策略。这对于初学者和专业人士来说都是一份宝贵的指南,有助于他们在实际项目中更加高效地...