`
flyingis
  • 浏览: 297642 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JavaScript 中的对象(下)

阅读更多
    作者:Flyingis

5  自定义类和对象

5.1  工厂方法

    在ECMAScript中创建工厂方法,返回一个特定类型的对象,以此实现代码的简洁适用。

function createFruit() {
  
var tempFruit = new Object;
  tempFruit.name 
= "apple";
  tempFruit.number 
= 5;
  tempFruit.showName 
= function() {
    alert(
this.name);
  }
;
return tempFruit;
}


var Fruit1 = creatFruit();
var Fruit2 = creatFruit();

    在createFruit()中可以加入形参来传入参数的值。随着ECMAScript不断被规范化,这种创建对象的方法已不再流行,一部分原因是语法上的,一部分原因是功能上的,如每个对象的实例都拥有属于自己的showName方法,给内存管理带来一定的开销。

5.2  构造函数

    选择一个类名,第一个字母大写,该类名即是构造函数的名称。创建一个构造函数和工厂方法比较类似,不同的是需要使用关键字new来创建对象的引用。使用构造函数的方式来创建对象和使用工厂方法有着相同的弊端。

function Fruit(name, number) {
  
this.name = name;
  
this.number = number;
  
this.showName = function() {
    alert(
this.name);
  }
;
}


var Fruit1 = new Fruit("apple"5);
var Fruit2 = new Fruit("pear"3);

5.3  使用 Prototype

    使用prototype属性可以用来创建新的对象,首先需要一个空的构造函数建立类的名称,然后所有的属性和方法都直接分配到prototype属性中。

function Fruit() {
}

Fruit.prototype.name 
= "apple";
Fruit.prototype.number 
= 5;
Fruit.prototype.showName 
= function() {
  alert(
this.name);
}
;

var fruit1 = new Fruit();
var fruit2 = new Fruit();

    但是,这样同样存在一些缺点。首先,构造函数中没有参数,给初始化带来一些麻烦,其次,当一个属性指向的是一个对象而非方法时,该对象会被所有的实例所共享,任何一点改动都会影响到其他对象引用的使用。

5.4  混合使用工厂方法和Prototype

这个概念很简单:使用构造函数定义所有除方法外的属性,使用 prototype 定义对象的方法。这样每个方法只会被创建一次,每个对象都能拥有自己对象实例的属性。

function Fruit(name, number) {
  
this.name = name;
  
this.number = number;
  
this.owner = new Array("Jerry""Terry");
}

Fruit.prototype.showName 
= function() {
  alert(
this.name);
}
;

var Fruit1 = new Fruit("apple"5);
var Fruit2 = new Fruit("pear"3);

5.5  动态 prototype

    简单来说,这种方法就是使用了一个标识符来判断 prototype 是否已经被指向某个方法,从而保证这些方法只会被创建并指向一次。

5.6  混合工厂方法

    这种方法和经典的工厂方法及构造函数方法在对象方法内存管理上存在同样的问题,一般不建议使用该方法,除了某些特殊情况(XML in JavaScript中有这样的例子)。

6  修改对象

    使用prototype对象可以对对象进行修改。除了用户自定义的对象外,ECMAScript原始对象也有prototype属性。直接使用 prototype可以给对象创建新的方法。

Number.prototype.toHexString = function() {
  
return this.toString(16);
}
;
var iNum = 10;
alert(iNum.toHexString());  
//输出A

    另外,使用prototype可以轻松修改已有的方法,让方法名指向新的方法。需要注意的是,指向新的方法后,原有的方法不再被任何对象使用,将会被垃圾回收器销毁,使得原有方法不再存在。比较安全的解决办法是,建立一个新的引用来保存原有的方法,然后再将原方法覆盖。

    比较特殊的是,ECMAScript中创建对象,在对象引用被创建后,可以给对象加入新的方法,并且可以立即在对象的引用中使用。这是ECMAScript的一个特性,但不推荐这样使用,以免带来不必要的麻烦,例如阅读理解、文档资料等。
分享到:
评论

相关推荐

    Javascript面向对象编程.

    这篇博客文章可能详细讨论了如何在JavaScript中实现面向对象编程。 在JavaScript中,面向对象主要通过以下三种方式实现: 1. **构造函数(Constructor)**:构造函数是一种特殊的函数,用于创建和初始化对象。我们...

    javascript中数组、对象

    在JavaScript中,数组和对象是两种非常基础且重要的数据结构,它们被广泛应用于各种场景,如数据存储、逻辑处理和对象表示。这篇文章将深入探讨这两种数据类型,以及相关的操作和工具。 **一、数组** 数组在...

    面向对象JavaScript精要(英文原版pdf)

    - **第三章:JavaScript中的类和对象**:详细介绍如何使用JavaScript创建类和对象。 - **第四章:继承**:探讨JavaScript中实现继承的不同方式。 - **第五章:封装和私有性**:讲解如何在JavaScript中实现封装以及...

    JavaScript面向对象编程指南

    面向对象编程的基础知识及其在JavaScript中的运用;数据类型、操作符以及流程控制语句;函数、闭包、对象和原型等概念,以代码重用为目的的继承模式;BOM、DOM、浏览器事件、AJAX和JSON;如何实现JavaScript中缺失的...

    JavaScript面向对象编程指南.pdf

    面向对象编程的基础知识及其在JavaScript中的运用;数据类型、操作符以及流程控制语句;函数、闭包、对象和原型等概念,以代码重用为目的的继承模式;BOM、DOM、浏览器事件、AJAX和JSON;如何实现JavaScript中缺失的...

    JAVASCRIPT 面向对象编程精要

    面向对象编程(OOP)作为一种重要的编程范式,在JavaScript中也有独特的实现方式。 #### 二、JavaScript的特性概述 JavaScript是一种基于原型的语言,这意味着它不像传统的面向对象语言(如Java或C++)那样拥有类的...

    javascript对象转换成json

    在JavaScript中,我们可以使用内置的`JSON.stringify()`方法将JavaScript对象转换为JSON字符串。 ### JSON.stringify()方法 `JSON.stringify()`是JavaScript中的全局函数,用于将JavaScript值转换为JSON字符串。它...

    JavaScript内置对象相关介绍及用法

    JavaScript内置对象相关介绍及用法ppt JavaScript内置对象相关介绍及用法

    javascript面向对象编程(中文).pdf

    - **现代JavaScript与面向对象编程**:现代JavaScript程序设计中融入了许多新的概念和技术,这些技术让JavaScript应用程序与以往相比有了显著的不同。面向对象编程是现代JavaScript的一个重要组成部分。 #### 二、...

    JavaScript面向对象的支持

    JavaScript中的面向对象特性主要体现在以下几个方面: 1. **基于原型的对象模型**: JavaScript采用的是基于原型的继承机制,而不是类的继承。这意味着每个对象都有一个`__proto__`属性,指向它的构造函数的原型...

    javascript创建对象的方式(二)

    在JavaScript中,创建对象是编程的基本操作之一,它支持多种方式来实现这一目的。这篇博客“javascript创建对象的方式(二)”可能详细介绍了在JavaScript中除了最基础的字面量语法之外的其他创建对象的方法。这里...

    JavaScript面向对象编程指南(第2版).rar

    面向对象编程(Object-Oriented Programming,OOP)是JavaScript中的一个重要概念,它允许开发者通过对象来组织代码,提高可读性和可维护性。本指南的第二版深入探讨了JavaScript的面向对象特性,旨在帮助开发者更好...

    面向对象JavaScript开发

    面向对象JavaScript开发是现代Web开发中不可或缺的一部分,它使得JavaScript能够构建复杂、可维护的应用程序。 面向对象编程是一种基于对象和类的编程范式,它强调数据和操作数据的方法的封装。在JavaScript中,...

    javascript面向对象编程.pdf

    JavaScript被设计成一种彻底的面向对象语言,尽管它的使用和接受过程中发生了发展和变化,吸引了其他如Ruby、Python、Perl等语言的程序员将他们的编程模式带入JavaScript。 JavaScript的面向对象编程与其他支持对象...

    JavaScript之Date对象(源代码)

    JavaScript之Date对象(源代码)JavaScript之Date对象(源代码)JavaScript之Date对象(源代码)JavaScript之Date对象(源代码)JavaScript之Date对象(源代码)JavaScript之Date对象(源代码)JavaScript之Date对象...

    JavaScript内置对象(ppt)

    JavaScript内置对象(ppt)JavaScript内置对象(ppt)JavaScript内置对象(ppt)JavaScript内置对象(ppt)JavaScript内置对象(ppt)JavaScript内置对象(ppt)JavaScript内置对象(ppt)JavaScript内置对象(ppt)...

    javascript对象参考手册

    JavaScript对象是编程语言的核心组成部分,尤其在Web开发中扮演着至关重要的角色。"JavaScript对象参考手册"涵盖了这一主题的广泛内容,旨在为开发者提供全面、深入的理解和实用指南。手册分为20个章节,不仅涉及...

    JavaScript面向对象编程指南 pdf

    - JavaScript对象都有一个内置的`__proto__`属性,指向其构造函数的原型。原型是一个对象,可以包含共享的属性和方法。原型链允许对象访问其构造函数原型上的属性和方法。 - 使用`Object.prototype.isPrototypeOf...

Global site tag (gtag.js) - Google Analytics