`

JavaScript中对类或对象的处理方法

阅读更多

JS生来就是完全面向对象的,可它却没有正式的类。这和现代大多数面向对象的语言(如,Java)是不同的。事实上,JS把类通过“构造函数”来定义,并在其中提供对“方法”和“属性”的支持。

 

关于“早绑定”和“晚绑定”的问题

 

“绑定”定义了如何将对象接口和对象实例结合起来。“早绑定”要求对象在实例化之前必须定义它的属性和方法,以便于编译器或解释器执行编译或解释操作。“晚绑定”的编译器或解释器不检查对象的类型,而只是关心对象是否支持代码中定义的属性和方法。JS的所有变量都采用晚绑定的方法,这就意味着,JS中对象的属性或方法可以在对象创建后动态指定,而不发生任何错误。这种“晚绑定”使得JS中对类和对象的处理极为灵活。

 

构造函数方式

 

因为JS对象的属性和方法可以在对象创建后动态定义,所以我们可以这样创建对象:

 

var oPhone = new object;
oPhone.color = "black";
oPhone.sendM = function() {
    alert("Hello, World!");
};

 

这样的代码创建对象没有语法问题,但在这种情况下,我们每创建一个类似的Phone对象,就要重复这样一段不算很短的代码。因为JS是解释性语言,这样大量重复的代码既影响文件大小,还有可能影响执行速度。我们必须对此进行改造。

 

function Phone(sColor, sMessage) {
    this.color = sColor;
    this.sendM = function() {
        alert(sMessage);
    };
};

var oPhone = new Phone("black", "Hello,World!");

 

通过function内置类对Phone的属性和方法进行封装,可是实现类似于Java之类面向对象语言的类定义,这种方式类似于Java中的构造函数,所以一般被称为“构造函数方式”。“构造函数”中一般使用this表示对对象自身的引用,并将this对象作为返回值(不必显式使用return语句)。注意,使用这种方法创建对象时,会重复生成函数,为每一个对象创建独立的函数版本,是没有任何意义的。

 

原型方式

 

JS规范中定义每一个对象,都有一个prototype属性,它是所创建对象的原型。通过指定这个prototype属性,可以实现对象的原型定义,这就是“原型方式”。上文中的Phone就可以这样定义:

 

function Phone() {
};

Phone.prototype.color = "black";
Phone.prototype.sendM = function() {
    alert("Hello, World!");
};

var oPhone = new Phone();

 

这段代码没有问题,但同样遇到了本文第一段代码的“不可复用”的问题。这的确是“原型方式”的缺点,即不能通过给构造函数传递参数初始化属性和方法。

 

构造函数/原型方式混合结构

 

问题即将被解决。混合使用构造函数和原型方式:用构造函数定义对象的所有属性,用原型方式定义对象的方法。这样的好处是,所有函数都只创建一次,而每个对象都具有自己的不同属性。上述的Phone对象就可以这样定义和实现:

 

function Phone(sColor, sMessage) {
    this.color = sColor;
    this.message = sMessage;
};

Phone.prototype.sendM() {
    alert(this.message);
};

var oPhone = new Phone("black", "Hello, World!");

 

构造函数/原型方式混合结构很好的模拟了类似于Java等面向对象编程语言中对类和对象的实现,这也是目前在JS编程中最常见的对象创建方式。

 

JS中真的需要实现类么?

 

这是一个问题。本文大致介绍了JS对类和对象的实现方式,但在本文的最后,我必须把这个问题提出来:我们真的需要在JS中实现自己的类和对象么?

 

今天,JS虽然得到了很大的发展,但还只是主要应用在Web领域。如果只是将JS作为一种简单的动态表现技术,只是用JS接收来自于用户代理的各种参数,我们几乎没有必要创建对象,因为要操作的各种属性直接来源于JS的内置类。我强烈反对为了一些所谓的“漂亮的动态效果”,而编写大量的JS代码。大量的JS代码是浏览器的沉重负担,而且绝大多数的网页的主要目的是向互联网用户提供易于阅读的信息,而不是不能被某些搜索引擎和浏览器抓取和显示的JS代码。

 

JS的效率毕竟是一个瓶颈,当我们万般无奈需要创建JS类或对象时,我们再使用这些方法吧。

1
0
分享到:
评论
2 楼 zhangyang 2008-09-17  
 
1 楼 jiyanliang 2008-09-17  
引用
JS生来就是完全面向对象

一直听说JS是基于对象的,而不是面向对象的。
面向对象的三个特性:封装 继承 多态。不知道它符合几个?

相关推荐

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

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

    JavaScript核心对象参考手册

    3. **函数对象Function**: 在JavaScript中,函数是第一类对象,可以作为变量、参数和返回值。`Function.prototype`提供了`call`和`apply`方法,用于改变函数调用时的上下文。 4. **数组Array**: `Array`对象提供了...

    javascript处理json字符串和json对象的类(含示例)

    在JavaScript中,可以使用`JSON.parse()`方法将一个JSON格式的字符串转换为JavaScript对象。这个方法接收一个JSON字符串作为参数,返回的是解析后的JavaScript对象。例如: ```javascript let jsonString = '{"name...

    浅析JavaScript中的类型和对象

    在探讨JavaScript编程时,类型和对象是两个基本且核心的概念。...随着对JavaScript对象和类型的深入理解,开发者将能够编写出更高效、更结构化的代码,同时利用JavaScript动态的特性和灵活性来解决实际问题。

    javascript对象参考手册

    JavaScript对象参考手册是一份详尽的资源,涵盖了JavaScript编程中的核心概念,特别是关于对象的使用。这份手册旨在帮助开发者深入理解JavaScript对象的本质,提高他们在实际项目中的应用能力。通过链接到的博主...

    javascript中的数组对象以及json学习笔记

    JavaScript可以通过`JSON.parse()`方法将JSON字符串转换为JavaScript对象,而`JSON.stringify()`方法则用于将JavaScript对象转换为JSON字符串。 在JavaScript中处理JSON数据时,我们经常使用`fetch`或`...

    JavaScript面向对象基础.ppt

    8.3.1 JavaScript对象模型 JavaScript有全局对象、内置对象、宿主对象等层次结构,如DOM(文档对象模型)和BOM(浏览器对象模型)。 8.3.2 客户端对象层次介绍 客户端对象层次主要涉及浏览器提供的对象,如window、...

    利用原生循环依赖关系序列化复杂JavaScript对象或ES6类

    本篇文章将深入探讨如何利用原生循环依赖关系来有效地序列化复杂JavaScript对象和ES6类。 首先,我们需要理解JavaScript中的引用类型和作用域。在JavaScript中,对象是引用类型,这意味着当你创建一个新对象并将其...

    javascript面向对象

    本文旨在深入解析JavaScript面向对象编程的基础,包括对象的基本概念、类与对象的关系、对象的属性与方法、封装、继承与多态,以及JavaScript中对象的实现方式。 #### 对象的基本概念 面向对象编程的核心在于对...

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

    在JavaScript中,对象是键值对的集合,可以使用对象字面量或构造函数创建。构造函数是一种特殊的函数,用于创建和初始化新对象。 继承是JavaScript中实现代码复用的一种方式。通过原型链机制,一个对象可以“继承”...

    检查控制台中的JavaScript对象方法和属性

    在本主题中,我们将深入探讨如何在控制台中检查JavaScript对象的方法和属性,这对于理解和解决问题至关重要。 首先,理解JavaScript对象的基本概念是至关重要的。对象是键值对的集合,这些键可以是字符串或符号,而...

    javaScript对象模型与事件处理借鉴.pdf

    这些事件对象都继承自 Event 对象,Event 对象是 JavaScript 事件处理中的基本对象。 JavaScript 对象模型与事件处理是 JavaScript 编程的两个核心概念。JavaScript 对象模型描述了对象之间的层次关系,而事件处理...

    Javascript API for ArcGIS Server对象模型图.rar

    1. **对象模型图**:对象模型图是API中各种对象、类和方法的可视化表示,它展示了它们之间的关系,有助于开发者快速理解API的结构和工作原理。在JavaScript API for ArcGIS Server中,主要包含Map、Layer、Geometry...

    JavaScript面向对象的支持

    这篇PPT主要探讨了JavaScript中的面向对象特性,包括对象、类型系统以及一些特殊类型如`undefined`的处理。 在JavaScript中,面向对象主要依赖于对象(Object)和函数(Function)。尽管JavaScript被称作是基于对象...

    JavaScript对象经典小册 chm

    综上所述,"JavaScript对象经典小册 chm"涵盖了JavaScript对象和数组的基础知识,以及相关的属性、方法和事件处理程序,是学习和提升JavaScript技能的宝贵资源。通过深入学习这些内容,开发者能够更好地应对复杂的...

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

    在JavaScript中,虽然它不是一种传统的类(class-based)面向对象语言,但它通过原型继承机制实现了强大的面向对象功能。 ##### 2.1 封装 封装是指将对象的状态信息隐藏在内部,仅通过公共接口与外部进行交互。在...

    JavaScript 面向对象.pdf

    在类中,我们可以定义一组方法,以便对对象执行不同的操作。在上面的例子中,我们定义了一个 `sayHello` 方法,它用于输出对象的属性。 继承 ------ 继承是面向对象编程的重要概念。它允许我们从现有的类创建新类...

    javascript面向对象框架

    MooTools提供了许多实用的工具和功能,比如Element、Fx、Events、Class等模块,这些模块使得开发人员能够轻松地处理DOM、动画效果、事件以及创建复杂的JavaScript对象。 1. **MooTools的Class系统**:MooTools的...

Global site tag (gtag.js) - Google Analytics