《JavaScript设计模式》深入学习 —— Constructor(构造器)模式

在经典的面向对象编程语言中,Constructor是一种在内存已分配给该对象的情况下,用于初始化新创建对象的特殊方法。在JavaScript中,几乎所有的东西都是对象,我们通常最感兴趣的就是Object构造器。

Object构造器用于创建特定类型的对象——准备好对象以备使用,同时接收构造器可以使用的参数,以在第一次创建对象时,设置成员属性和方法的值。

(1) 对象创建

① var newObject = {};

② var newObject = new Object();

赋值:

ECMAScript 3兼容方式

1. 点语法

// 设置属性
newObject.someKey = ‘Hello World‘;
// 获取属性
var key = newObject.someKey;

2. 中括号语法

// 设置属性
newObject[‘someKey‘] = ‘Hello World‘;
// 获取属性
var key = newObject[‘someKey‘];

只适用于ECMAScript 5的方式

3. Object.defineProperty

// 设置属性
Object.defineProperty( newObject , ‘somekey‘ , {
    value : ‘I love You‘,
    writable : true,
    enumerable : true,
    configurable : true
} );

4. Object.defineProperties

// 设置属性
Object.defineProperties( newObject ,  {
    ‘somekey‘ : {
        value : ‘I love You‘,
        writable : true,
        enumerable : true,
        configurable : true
    },
    ‘anotherkey‘ : {
        value : ‘I Hate You‘,
        writable : true,
        enumerable : true,
        configurable : true
    }
} );

(2) 带原型的Constructor(构造器)

调用JavaScript构造器创建一个对象后,新对象就会具有构造器原型的所有属性。

例如:

// 创建构造器
function Car( model , year , miles ) {
    this.model = model;
    this.year = year;
    this.miles = miles;
}
Car.prototype.toString = function () {
    return this.model + ‘ has done ‘ + this.miles + ‘ miles‘;
};
// 用法
var civic = new Car ( ‘Honda Civic‘ , 2015 , 20000 );
console.log(civic.toString());  // Honda Civic has done 20000 miles

现在toString()的单一实例就能在所有Car对象之间共享了。

时间: 2024-10-13 19:37:51

《JavaScript设计模式》深入学习 —— Constructor(构造器)模式的相关文章

一头扎进JavaScript设计模式(一)- 构造器模式(Constructor)

一.前言 1.对象是什么?怎么创建?怎么赋值? 在这边就不展开讲了,请参考另外一篇博文JavaScript 对象详解. 2.Contructor是什么? 在这边我们先运用书上的一段话:在经典的面向对象变成语言中,constructor是一种在内存已分配给该对象的情况下,用于初始化新创建对象的特殊方法. 3.Constructor有什么用? 当我们实例化一个对象的时候,对象的构造器会根据你实例化时的参数进行初始化,设置成员属性和方法的值. 二.基本 Constructor 我们创建一个Person

《Head First 设计模式》学习笔记——单件模式

设计模式 单件模式:确保一个类只有一个实例,并提供一个全局访问点. 要点 单件模式确保程序中一个类最多只有一个实例. 在Java中实现单件模式需要私有的构造器.一个静态方法.一个静态变量. 确定在性能和资源上的限制,然后小心翼翼的选择适当的方案来实现单件,以解决多线程问题. 全局变量缺点 如果将对象赋值给一个全局变量,那么必须在程序一开始就创建好对象.万一对象非常耗费资源,而程序在这次执行过程中并没有使用它,就形成了浪费. 单件模式 public class Singleton { //利用一个

《Head First 设计模式》学习笔记——模板方法模式

模板方法模式是类的行为模式.准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑.不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现.这就是模板方法模式的用意. 设计模式 模板方法模式:在一个方法中定义一个算法的框架,而将一些步骤延迟到子类中.模板方法使得子类可以在不改变算法结果的情况下,重新定义算法中的某些步骤. 模板就是一个方法,这个方法将算法定义成一组步骤,其中的任何步骤都可以是抽象的,由子类负责实现.这样可以确

javascript设计模式详解之命令模式

每种设计模式的出现都是为了弥补语言在某方面的不足,解决特定环境下的问题.思想是相通的.只不过不同的设计语言有其特定的实现.对javascript这种动态语言来说,弱类型的特性,与生俱来的多态性,导致某些设计模式不自觉的我们都在使用.只不过没有对应起来罢了.本文就力求以精简的语言去介绍下设计模式这个高大上的概念.相信会在看完某个设计模式之后有原来如此的感慨. 一.基本概念与使用场景: 基本概念: 将请求封装成对象,分离命令接受者和发起者之间的耦合. 命令执行之前在执行对象中传入接受者.主要目的相互

学习javascript设计模式之发布-订阅(观察者)模式

1.发布-订阅模式又叫观察者模式,它定义对象之间一种一对多的依赖关系. 2.如何实现发布-订阅模式 2-1.首先指定好发布者 2-2.给发布者添加一个缓冲列表,用户存放回调函数以便通知订阅者 2-3.最后发布消息时候,发布者会遍历这个缓存列表,依次触发里面存放的订阅者回调函数 例子: var salesOffice = {};salesOffice.clientList = [];salesOffice.listen = function(key,fn){    if(!this.clientL

JavaScript设计模式与开发实践 模板方法模式

一.模板方法模式的定义和组成 模板方法模式是一种只需使用继承就可以实现的非常简单的模式. 模板方法模式由两部分结构组成,第一部分是抽象父类,第二部分是具体的实现子类.通常在抽象父类中封装了子类的算法框架,包括实现一些公共方法以及封装子类中所有方法的执行顺序.子类通过继承这个抽象类,也继承了整个算法结构,并且可以选择重写父类的方法. 二.第一个例子--Coffee or Tea 我们先来泡一杯咖啡,泡咖啡的步骤通常如下: 把水煮沸 用沸水冲泡咖啡 把咖啡倒进杯子 加糖和牛奶 var Coffee

javascript设计模式研究学习-设计模式类别

编写易于维护的代码,其中一个最重要的方面是能够找到代码重复出现的主体并优化它们.这也是设计模式的有价值的地方. 设计模式类别: 一.创建型设计模式 创建型设计模式划分专注于处理对象创建机制,以适合给定情况的方式来创建对象.创建对象的基本方法可能导致项目复杂性增加,而这些模式旨在通过控制创建过程来解决这种问题. 大致可以分为: Constructor(构造器) Factory (工厂) Abstract (抽象) Prototype (原型) Singleton (单例) Builder (生成器

《Head First 设计模式》学习笔记——命令模式

在软件系统,"行为请求者"与"行为实施者"通常存在一个"紧耦合".但在某些场合,比方要对行为进行"记录.撤销/重做.事务"等处理,这样的无法抵御变化的紧耦合是不合适的.在这样的情况下.怎样将"行为请求者"与"行为实现者"解耦?将一组行为抽象为对象,实现二者之间的松耦合.这就是命令模式(Command Pattern)----题记 设计模式 命令模式:将"请求"封装成对

《Head First 设计模式》学习笔记——复合模式

模型-视图-控制器(MVC模式)是一种很经典的软件架构模式.在UI框架和UI设计思路中扮演着很重要的角色.从设计模式的角度来看,MVC模式是一种复合模式.它将多个设计模式在一种解决方式中结合起来,用来解决很多设计问题.MVC模式把用户界面交互分拆到不同的三种角色中,使应用程序被分成三个核心部件:Model(模型).View(视图).Control(控制器).----题记 设计模式 复合模式:结合两个或以上的模式,组成一个解决方式,解决一再发生的一般性问题.如MVC和Model 2 模型-视图-控

《Head first设计模式》学习笔记 – 迭代器模式

代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示. 爆炸性新闻:对象村餐厅和对象村煎饼屋合并了!真是个好消息!现在我们可以在同一个地方,享用煎饼屋美味的煎饼早餐,和好吃的餐厅午餐了.但是,好像有一点小麻烦:新的餐厅想用煎饼屋菜单当作早餐的菜单,使用餐厅的菜单当做午餐的菜单,大家都同意了这样实现菜单项.但是大家无法同意菜单的实现.煎饼屋使用ArrayList记录他的菜单项,而餐厅使用的是数组.他们两个都不愿意改变他们的实现,毕竟有太多代码依赖于它们了. 检查菜单项 让我