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

一、前言

  1.对象是什么?怎么创建?怎么赋值?

  在这边就不展开讲了,请参考另外一篇博文JavaScript 对象详解

  2.Contructor是什么?

  在这边我们先运用书上的一段话:在经典的面向对象变成语言中,constructor是一种在内存已分配给该对象的情况下,用于初始化新创建对象的特殊方法。

  3.Constructor有什么用?

  当我们实例化一个对象的时候,对象的构造器会根据你实例化时的参数进行初始化,设置成员属性和方法的值。

二、基本 Constructor

  我们创建一个Person对象,并且添加成员属性和方法,最后实例化并且运行方法。

代码如下:

// 定义一个Person对象function Person(name,country){
    this.name = name;
    this.country = country;
    this.speak = function(){
        console.info(‘my name is ‘ + this.name + ‘,I\‘m form ‘ + this.country);
    };
}

var p1 = new Person(‘Niki‘,‘China‘); // 实例化一个Person对象
var p2 = new Person(‘Bob‘,‘England‘); // 实例化一个Person对象
p1.speak(); // my name is Niki,I‘m form China p2.speak(); // my name is Bob,I‘m form England

三、带原型的 Constructor

  上面那个基本的Constructor案例我们可以看出,有些方法其实各个对象之间是相同的,所以我们可以放在Person对象的原型中,从而达到方法在所有Person对象中共享的目的。

 代码如下:

//定义一个Person对象function Person(name,country){
    this.name = name;
    this.country = country;
}

//在Person对象的原型中添加公共方法
Person.prototype.speak = function(){
    console.info(‘my name is ‘ + this.name + ‘,I\‘m form ‘ + this.country);
};
var p1 = new Person(‘Niki‘,‘China‘);
var p2 = new Person(‘Bob‘,‘England‘);
p1.speak(); // my name is Niki,I‘m form China
p2.speak(); // my name is Bob,I‘m form England

注意:

我们是添加原型方法而不是重写原型,所以我们要用的是:

Person.prototype.speak = function(...){
  //...
}

而不是:

Person.prototype = {
    speak : function(...){
        //...
    }
}

后者会吧Person对象的整个原型重写,如果前面有添加过其他原型则会导致其他原型方法丢失。

时间: 2024-07-29 22:07:34

一头扎进JavaScript设计模式(一)- 构造器模式(Constructor)的相关文章

【javascript设计模式】构造器模式、模块模式、单例模式

构造器模式(Constructor) 构造器模式是学习js最早接触的一种,实现主要如下: 1 function myObject(name){ 2 this.name = name; 3 } 4 5 myObect.propotype = function sayName(){ 6 alert(this.name); 7 } 使用的时候需要new一个对象. 1 var myObj = new myObject('hello'); 2 myObj.sayName(); 模块模式(Module) 模

javascript设计模式:构造器模式学习一

javascript 设计模式1.简介javascript是一种弱类型语言,不过类可以通过函数模拟出来最常见的实现方法如下:function Car(model){ this.model = model; this.color = "red"; this.year = "2012"; this.getInfo = function(){ return this.model + " " + this.year; }}接下来我们可以使用上边定义Car

一头扎进Node系列 - 目录

一.前言 本系列是属于初级教程.博主我也还只是一个node的新兵蛋子,想通过学习官网的API文档,慢慢的打好Node基础.当然后期这系列文档会慢慢完善,并且会添加一些项目实战中遇到的一些问题以及解决方案!如果你也是初学者,欢迎你一起加入我们的 NODE API 学习之路吧! Node官网   :https://nodejs.org/api/ Node中文网:http://nodejs.cn/doc/node/index.html 二.目录 一头扎进Node系列 - URL 一头扎进Node系列

《一头扎进》系列之Python+Selenium框架设计篇3- 价值好几K的框架,狼来了,狼来了....,狼没来,框架真的来了

1. 简介 前边宏哥一边一边的喊框架,就如同一边一边的喊狼来了!狼来了!.....这回是狼没有来,框架真的来了.从本文开始宏哥将会一步一步介绍,如何从无到有地创建自己的第一个自动化测试框架.这一篇,我们介绍,如何封装自己的日志类和浏览器引擎类. 2. 创建项目层级结构 如何创建,怎么创建.这个就需要我们前边介绍的框架概要设计以及框架的详细设计的思维导图,宏哥就是根据那个图,轻松地.清楚的.思路清晰地一步一步创建项目层级结构. 相关步骤: 1. 打开PyCharm,创建如下格式的项目层级结构,为了

《一头扎进》系列之Python+Selenium框架实战篇4- 价值好几K的框架,呵!这个框架有点意思啊!!!

1.简介 前面文章,我们实现了框架的一部分功能,包括日志类和浏览器引擎类的封装,今天我们继续封装一个基类和介绍如何实现POM.关于基类,是这样定义的:把一些常见的页面操作的selenium封装到base_page.py这个类文件,以后每个POM中的页面类,都继承这个基类,这样每个页面类都有基类的方法,这个我们会在这篇文章由宏哥实现. 2.项目层级结构 1. 上一篇中我们已经创建好了项目层级结构,具体项目层级结构如下图.这里不再赘述,相关文件也如下: 3. 定位和截图类封装 1. 在实现封装基类里

《一头扎进》系列之Python+Selenium框架设计篇6 - 价值好几K的框架,呦!这个框架还真牛叉哦!!!

1. 简介 本文开始介绍如何通过unittest来管理和执行测试用例,这一篇主要是介绍unittest下addTest()方法来加载测试用例到测试套件中去.用addTest()方法来加载我们测试用例到suite中去和利用discover()方法去加载一个路径下所有的测试用例. 2. addTest()方法 这里首先介绍unittest下addTest()方法来加载测试用例到测试套件中去.为了演示效果,我在前面文章的脚本基础上,新建了一个测试脚本,这个测试脚本有一个测试用例,加上前面的测试脚本,一

JavaScript设计模式之策略模式(学习笔记)

在网上搜索“为什么MVC不是一种设计模式呢?”其中有解答:MVC其实是三个经典设计模式的演变:观察者模式(Observer).策略模式(Strategy).组合模式(Composite).所以我今天选择学习策略模式. 策略模式:定义了一系列家族算法,并对每一种算法单独封装起来,让算法之间可以相互替换,独立于使用算法的客户. 通常我并不会记得“牛顿第一定律”的具体内容,所以我也难保证我会对这个定义记得多久……用FE经常见到的东西来举个例子说明一下: $("div").animation(

javascript设计模式-module(模块)模式

模块是任何强大应用程序中不可或缺的一部分,它通常能帮助我们清晰地分离和组织项目中的代码单元. js中实现模块的方法: 对象字面量表示法 Module模式 AMD模块 CommonJS模块 ECMAScript Harmony 模块 对象字面量 对象字面量不需要使用new运算符进行实例化,但不能用在一个语句的开头,因为开始的可能被解读为一个块的开始,在对象的外部,新成员可以使用如下赋值语句添加到对象字面量上,myModule.property = "someValue". var myM

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

在经典的面向对象编程语言中,Constructor是一种在内存已分配给该对象的情况下,用于初始化新创建对象的特殊方法.在JavaScript中,几乎所有的东西都是对象,我们通常最感兴趣的就是Object构造器. Object构造器用于创建特定类型的对象--准备好对象以备使用,同时接收构造器可以使用的参数,以在第一次创建对象时,设置成员属性和方法的值. (1) 对象创建 ① var newObject = {}; ② var newObject = new Object(); 赋值: ECMASc