第六章-面向对象的程序设计—创建对象

使用对象字面量和或者构造函数都可以创建对象,但是都有缺点:使用同一个借口创建对象,会导致代码重复。为解决这个问题,人们开始使用工厂模式。

1 工厂模式

 1  function create(name,age,job){
 2          var o = new Object();
 3          o.name = name;
 4          o.age = age;
 5          o.sayName = function(){
 6              alert(this.name);
 7          }
 8      }
 9      var person1 = create(‘XU‘,27);
10      var person2 = create(‘tang‘,35);

2.构造函数

要创建Person的实例,必须使用new操作符,以这种方式调用构造函数会尽力四个步骤:

1.创建一个对象;2.将构造函数的作用域赋给新对象(因此this指向了这个新对象);3.执行构造函数中的代码(为这个新对象添加属性);4.返回新对象。

2.1 将构造函数当做函数

   构造函数和其他函数的区别,就在于调用他们的方式不同。

2.2原型

在这里需要注意的简写的格式:我们将Person.prototype对象设置为等于一个对象字面量形式创建的新对象。最终结果相同,但是constructor不再指向Person,我们知道,每创建一个新函数,就会同时创建它的prototype对象,这个对象会自动获得constructor属性。但我们在这里的语法,本质上重新改写了prototype对象,因此constructor不再指向Person,而是Object。

注意这下面的代码和上面代码的区别

这里需要重新把constructor改回到Person:

时间: 2024-10-14 05:05:53

第六章-面向对象的程序设计—创建对象的相关文章

第六章 面向对象的程序设计 (2 创建对象)

6.2 创建对象 6.2.1 工厂模式 工厂模式是软件工程领域一种广为人知的设计模式,这种模式抽象了创建具体对象的过程.考虑到在ECMAScript 中无法创建类,开发人员就发明了一种函数,用函数来封装以特定接口创建对象的细节. function createPerson(name, age, job){ var o = new Object(); o.name = name; o.age = age; o.job = job; o.sayName = function(){ alert(thi

第六章 面向对象的程序设计 (1 理解对象)

面向对象(Object-Oriented,OO)的语言有一个标志,那就是它们都有类的概念,而通过类可以创建任意多个具有相同属性和方法的对象. ECMA-262 把对象定义为:"无序属性的集合,其属性可以包含基本值.对象或者函数."严格来讲,这就相当于说对象是一组没有特定顺序的值.对象的每个属性或方法都有一个名字,而每个名字都映射到一个值.正因为这样,我们可以把ECMAScript 的对象想象成散列表:无非就是一组名值对,其中值可以是数据或函数. 每个对象都是基于一个引用类型创建的. 6

第六章 面向对象的程序设计 (3 继承)

6.3 继承 许多OO 语言都支持两种继承方式:接口继承和实现继承.接口继承只继承方法签名,而实现继承则继承实际的方法.如前所述,由于函数没有签名,在ECMAScript 中无法实现接口继承.ECMAScript 只支持实现继承,而且其实现继承主要是依靠原型链来实现的. 6.3.1 原型链 ECMAScript 中描述了原型链的概念,并将原型链作为实现继承的主要方法.其基本思想是利用原型让一个引用类型继承另一个引用类型的属性和方法.简单回顾一下构造函数.原型和实例的关系:每个构造函数都有一个原型

第六章-面向对象的程序设计(理解对象)

ESMA把对象定义为:"无序属性的集合,其属性可以包含基本值,对象和函数".严格的讲,这相当于说对象是一组没有特定顺序的值,对象的每个属性或方法都有一个名字,而每一个名字都映射到一个值. 1.理解对象 创建对象有对象字面量的方法,这种方法比较常用,也是比较推荐的. 1 var person ={ 2 name:'xu', 3 age:27, 4 sayName:function(){ 5 alert(this.name); 6 } 7 }; 还有创建对象的实例的方法: 2.属性的类型

JavaScript高级程序设计-第六章面向对象的程序设计

创建对象主要的两种形式,创建Object实例和创建对象字面量 对象包含属性和方法 数据 .属性有四个特性,特性是为了描述属性行为的,他们是: Configurable(可配置的)是否能删除或是否能修改为访问器属性 Enumerable(枚举)是否能够for-in Writeable(可写)能否修改属性值 Value(值)默认为undefined,从这个位置上读数据或把新值保存到这个位置上 eg: var person = {}'; Object.defineproperty(person,"na

读书笔记 - js高级程序设计 - 第六章 面向对象的程序设计

EcmaScript有两种属性 数据属性 和 访问器属性 数据属性有4个特性 Configurable Enumerable Writable Value 前三个值的默认值都为false 举例 Object.defineProperty( person, "name", { writable:false, value:"niko"} ) ; 一旦属性定义为不可配置的,就不能再把它变回可配置的了 读取属性 的特性 var descriptor  = Object.ge

第六章 面向对象的程序设计

属性类型 1.数据属性特性 [[Configurable]](可配置):能否通过delete删除属性重新定义属性,能否修改属性的特性,或者能否把属性修改为访问器属性. [[Enumerable]](可枚举):能否通过for-in循环返回属性. [[Writable]](可写):能否修改属性的值. [[Value]](值):包含这个属性的数据值.读写属性值都再这,默认为undefined. 修改属性默认的特性,必须使用Object.defineProperty()方法. Object.define

JavaScript高级程序设计(第三版)第六章 面向对象的程序设计

6.1 理解对象 var person = new Object(); person.name = "Nicholas"; person.age = 29; person.job = "Software Engineer"; person.sayName = function(){ alert(this.name); }; person.sayName(); 6.1.1 属性类型 1.数据属性 [[Configurable]]:表示能否通过delete删除属性从而重

(六)面向对象的程序设计 - (2)创建对象

本章内容 工厂模式 构造函数模式 原型模式 组合使用构造函数模式和原型模式 动态原型模式 寄生构造函数模式 稳妥构造函数模式 Object构造函数或对象字面量都可以用来创建单个对象,缺点是:使用同一个接口创建很多对象,会产生大量的重复代码.为解决这个问题,人们开始使用工厂模式的一种变体. 工厂模式 工厂模式是软工中一种广为人知的设计模式,这种模式抽象了创建具体对象的过程.在ECMAScript中无法创建类,开发人员就发明了一种函数,用函数来封装特定接口创建对象的细节. 函数createPerso