Javascript学习笔记:对象的创建

最基本的对象创建方式是通过Object构造函数或对象字面量的方式创建:

①通过Object构造函数的方式创建对象:

1 var person=new Object();//或者写成var person={}
2 person.name=‘张三‘;

②通过对象字面量的方式创建对象:

1 var person={name:‘张三‘};

Object构造函数模式和对象字面量模式这两种创建对象的方式,都有明显的缺点:使用同一个接口创建很多对象的时候,会产生大量的重复代码。为解决这个问题,可以使用工厂模式。工厂模式就是以函数的方式来封装以特定接口创建对象的细节。

③以工厂模式的方式创建对象:

1 function createPerson(name,sex){
2   var person={};
3   person.name=name;
4   person.sex=sex;
5   return person;
6 }
7
8 var person=createPerson(‘张三‘,‘男‘);

工厂模式创建对象的方式虽然解决了重复代码的问题,但是还有一个重要的问题还有待解决,那就是对象识别的问题,就是所有以工厂模式创建对象的方式产生的对象都只能判断是Object类型,不能够进一步识别该对象。为了解决这一问题,我们可以使用构造函数模式。

④以构造函数模式的方式创建对象:

1 function Person(name,sex){
2   this.name=name;
3   this.sex=sex;
4 }
5 var p=new Person(‘张三‘,‘男‘);

以构造函数模式创建对象的方式与以工厂模式创建对象的方式的不同之处在于:a、没有显示的创建对象;b、直接将属性和方法付给了this;c、没有return语句。同时要创建Person的实例,必须用new操作符。通过构造函数的方式创建的对象可以通过p.constructor==Person或者p instanceof Person来判定对象的类型。虽然以构造函数的方式创建对象解决了对象识别的问题,但是仍然有一些问题,就是该引用类型存在方法属性时,每个方法都要在每个实例上重新创建一遍。我们可以使用原型模式来解决这个问题。原型模式就是在构造函数的prototype上添加属性和方法,这些方法和属性是所有通过该构造函数生成的对象实例共享的。使用原型模式的好处就是可以让所有对象实例共享原型对象上的属性和方法。

⑤以原型模式的方式创建对象:

 1 function Person(name,age){
 2   this.name=name;
 3   this.age=age;
 4 }
 5
 6 Object.defineProperty(Person.prototype,‘birth‘,{get:function(){
 7   return ((new Date()).getFullYear()-this.age);
 8 }})
 9
10 var p=new Person(‘张三‘,25);
11 console.log(p.birth); //1991
时间: 2024-08-05 17:57:57

Javascript学习笔记:对象的创建的相关文章

JavaScript 学习笔记 - 对象和继承

本文是JavaScript The Good Part 有关对象和继承的学习笔记. 1. Object.create 本函数是ECMAScript 5中的标准函数,其作用是用一个对象作为原型来生成另一个对象,可以用以下的code 模拟实现. if(typeof Object.create !== 'function') { Object.create = function(proto){ var F = function(){}; if(typeof proto !== 'object'){ /

JavaScript学习笔记——对象知识点

javascript对象的遍历.内存分布和封装特性 一.javascript对象遍历 1.javascript属性访问 对象.属性 对象[属性] //字符串格式 2.javascript属性遍历 for in 二.内存分布 三.对象的特性之封装 把对象所有的组成部分组合起来,尽可能的隐藏对象的部分细节,使其受到保护. 只保留有限的接口和外部发生联系. 一.工厂函数 二.构造函数 三.prototype方法 四.混合方法

JavaScript学习笔记——对象基础

javascript对象基础 一.名词解释: 1.基于对象 一切皆对象,以对象的概念来编程. 2.面向对象编程(oop Object oriented programming) A.对象 就是人们要研究的任何事物,不仅能表示具体事物,还能表示抽象的规则,计划或事件. 属性的无序集合,每个属性可以存一个值(原始值,对象,函数) B.对象的属性和行为 属性:用数据值来描述他的状态 行为:用来改变对象行为的方法 C.类 具有相同或相似的性质的对象的抽象就是类.对象的抽象,就是类,类的具体化(实例化)

JavaScript学习笔记——对象分类

对象的分类和内置Math对象 一.对象的分类 1.内置对象 Global Math 2.本地对象 Array Number String Boolean Function RegExp 3.宿主对象 DOM BOM 二.Math对象 格式: Math.方法(参数) 1.取绝对值 Math.abs(); 2.取近似整数 //Math.round() 四舍五入 //Math.floor() 对数进行下取舍 //Math.ceil() 对数进行上取舍 3.取最大值或最小值 Math.max(参数...

javascript学习笔记-对象

原文地址:http://blog.51cto.com/hudamao/2115725

javascript学习笔记---ECMAScriptECMAScript 对象----定义类或对象

使用预定义对象只是面向对象语言的能力的一部分,它真正强大之处在于能够创建自己专用的类和对象. ECMAScript 拥有很多创建对象或类的方法. 原始的方式 因为对象的属性可以在对象创建后动态定义(后绑定),类似下面的代码: var oCar = new Object; oCar.color = "blue"; oCar.doors = 4; oCar.mpg = 25; oCar.showColor = function() { alert(this.color); };不过这里有一

javascript学习笔记---ECMAScriptECMAScript 对象----修改对象

通过使用 ECMAScript,不仅可以创建对象,还可以修改已有对象的行为. prototype 属性不仅可以定义构造函数的属性和方法,还可以为本地对象添加属性和方法. 创建新方法 通过已有的方法创建新方法Number.prototype.toHexString = function() { return this.toString(16); }; 在此环境中,关键字 this 指向 Number 的实例,因此可完全访问 Number 的所有方法.有了这段代码,可实现下面的操作: var iNu

JavaScript学习笔记【2】表达式和运算符、语句、对象

笔记来自<JavaScript权威指南(第六版)> 包含的内容: 表达式和运算符 语句 对象 表达式和运算符 数组直接量中的列表逗号之间的元素可以省略,这时省略的空位会填充值undefined.元素列表末尾可以留下单个逗号,这时并不会创建一个新的值为undefined元素. 属性访问表达式,.identifier的写法只适用于要访问的属性名称是合法的标识符,并且需要知道要访问的属性的名字.如果属性名称是一个保留字或者包含空格和标识符,或是一个数字(对于数组来说),则必须使用方括号的写法.当属性

javascript学习笔记---ECMAScript语法(引用类型)

引用类型通常叫做类(class). 本教程会讨论大量的 ECMAScript 预定义引用类型. 引用类型 引用类型通常叫做类(class),也就是说,遇到引用值,所处理的就是对象. 本教程会讨论大量的 ECMAScript 预定义引用类型. 从现在起,将重点讨论与已经讨论过的原始类型紧密相关的引用类型. 注意:从传统意义上来说,ECMAScript 并不真正具有类.事实上,除了说明不存在类,在 ECMA-262 中根本没有出现"类"这个词.ECMAScript 定义了"对象定

JavaScript学习笔记【3】数组、函数、服务器端JavaScript概述

笔记来自<JavaScript权威指南(第六版)> 包含的内容: 数组 函数 服务器端JavaScript概述 数组 数组是动态的:根据需要它们会增长或缩减,并且在创建数组时无须声明一个固定的大小或在数组大小变化时无须重新分配空间. 数组可能是稀疏的:索引不一定要连续的,它们之间可以有空缺. 通常,数组的实现是经过优化的,用数字索引来访问数组元素一般来说比访问常规的对象属性要快很多. 数组继承自Array.prototype中的属性,它定义了一套丰富的数组操作方法. 如果省略数组直接量中的某个