`
myali88
  • 浏览: 28654 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

JavaScript中的“类”

    博客分类:
  • web
阅读更多

原文:JavaScript classes

 

    JavaScript是一种功能强大而优雅的语言,它拥有许多很好的特点,然而,有一个特点是它所不具备的,那就是“类”,至少在它的静态类型上没有经典继承的语义。但是,JavaScript有一个健状的对象原型(prototype)系统,这也是本文探讨的基础。

    开始吧,考虑下面这个简单的JavaScript函数:

 

function Person( name ){
	this.name = name;
}

 

    从上面的代码可以了解,在JavaScript中,函数除了发挥它们通常的作用外,还是JavaScript中原型(prototype)的基础。我们可以使用如下代码创建新的Person实例:

var bob = new Person( "Bob");
var alice = new Person( "Alice");

 

   在这里要指出的是,bob是一个从Person的原型中创建的对象。如果我们访问bob.name会发现它包含字符串“Bob”。bob对象拥有一些可用方法,像toString(),它们都是从Object中继承而来的(稍后更多介绍)。

   与其它经典的静态类型继承语言(Java,C#)中的类不同,JavaScript中的原型(prototypes)是可以修改的,它的每个实例都会相应的应用这种改变。假设我们想要Person的所有实例都有一个greet()方法,可以用以下代码达到目的:

Person.prototype.greet = function( otherPerson ){
	alert( "Hello " + otherPerson.name + ", I'am " + this.name );
}

   现在我们有了两个可以相互问候的Person,bob和alice:

bob.greet( alice ); // alerts "Hello Alice, I'm Bob"
alice.greet( bob ); // alerts "Hello Bob, I'm Alice"

   当我们调用 bob.greet()方法时,JavaScript引擎会在下面的位置查找 greet 函数:

       1.bob自身的属性(成员)(如同 bob.name)
       2.Person.prototype的属性
       3.Object.prototype的属性

   JavaScript引擎在找到作为Person.prototype属性的greet后将不再查找,另外,如果调用 bob.toString()则会强制JavaScript引擎沿着上面的路径向上查找,直到在Object.prototype中找到一个相匹配的。我们也可以通过在Person.prototype中定义toString()重载其行为。

Person.prototype.toString = function(){
	return this.name.toString();
};

    前面列出的三个位置是JavaScript运行时查找属性的唯一地方,换句话说,在面向对象的语言中以创建父类的子类的方式来继承,而JavaScript并不会天生的像这样支持原型到原型的继承。当然,JavaScript也足够强大,它允许使用框架或库以不同的形式来覆盖继承模式。例如,一种方式,复制一个原型的成员到另一个原型,另一种高级些的方式,捕获属性查找事件,然后沿着一个特别维护的继承链查找,返回第一个匹配的属性。本文只作介绍性的提及,这两种方法都已经超出了本文的介绍范围。

    本文将注意力完全集中在JavaScript中的“类”的入门上,我希望这里的介绍能建立起一些概念,在将来的文章中再来深入剖析,如,关键字“new”的内部工作方式。

 

分享到:
评论
1 楼 lukejin 2010-02-05  
哈哈 我今天把去年写的东西搞过来了 ,之前还画了图的找不到了。

相关推荐

    javascript中的类理解

    在 `WuYouUser` 类中,`NewArticle` 是一个方法,代表用户发表文章的行为。方法可以像访问属性一样调用,如: ```javascript Wo.NewArticle(); document.write(Wo.ArticleCount); ``` 这将增加 `ArticleCount` ...

    javascript中类和继承(代码示例+prototype.js)

    在JavaScript中,类和继承是面向对象编程的重要概念。JavaScript是一种动态类型的语言,它没有像Java或C++那样的传统类,而是使用函数作为构造器来模拟类的行为,并通过原型链实现继承。本文将深入探讨JavaScript中...

    javascript中类的定义方式详解(四种方式)

    本文实例讲述了javascript中类的定义方式。分享给大家供大家参考,具体如下: 类的定义包括四种方式: 1、工厂方式 function createCar(name,color,price){ var tempcar=new Object; tempcar.name=name; tempcar...

    Javascript中类式继承和原型式继承的实现方法和区别之处

    其它的面向对象程序设计语言都是通过关键字来解决继承的问题。但是javascript中并没有定义这种实现的机制。接下来通过本文给大家介绍Javascript中类式继承和原型式继承的实现方法和区别,需要的朋友可以参考下

    JavaScript中的类继承

    JavaScript中的类继承 JavaScript中的类继承

    asp.net中javascript通用类

    通过这样的通用JavaScript类,开发者可以创建出更健壮、可维护的ASP.NET应用,同时提高开发效率。不过,随着技术的发展,现代Web开发中更多地倾向于使用库和框架(如jQuery、React、Vue等),它们提供了更高级别的...

    JavaScript中的类(Class)详细介绍

    在JavaScript中,可以使用类(Class)来实现面向对象编程(Object Oriented Programming)。不过,JavaScript中的类与Java中的有所不同,其相应的定义和使用也不一样。 JavaScript中类的定义 在JavaScript中,所有从同一...

    javascript中文参考手册

    随着JavaScript的发展,ES6(ECMAScript 2015)引入了许多新特性,如类(class)、箭头函数(=>)、模板字符串(`)、解构赋值、模块(import/export)、Promise对象、生成器(generator)等,大大提高了代码的...

    javascript中文参考_btest115

    类是ES6引入的,它为JavaScript提供了面向对象编程的语法糖,但JavaScript的本质仍然是基于原型的继承。 JavaScript还支持异步编程,常见的有回调函数、Promise和async/await。回调函数常用于处理异步操作,如Ajax...

    aspnet操作javascript类

    JavaScript类在Web开发中的应用广泛,它们允许我们创建复杂的数据结构,封装逻辑,以及实现面向对象的编程风格。在ASP.NET中,我们可以通过以下几种方式使用JavaScript类: 1. **定义和实例化JavaScript对象**:在...

    JavaScript编程中的类详解

    类还可以包含方法,方法是类中可执行的函数。例如,给`WuYouUser`类添加一个`NewArticle`方法,表示用户发表文章的行为: ```javascript function WuYouUser() { this.Name; this.ArticleCount = 0; this.New...

    JavaScript教程 JavaScript源码

    JavaScript主要运行在浏览器环境中,用于增强用户界面,提供动态交互。它支持事件驱动、函数式以及基于原型的编程风格。JavaScript的核心特性包括弱类型、动态类型、基于原型的对象、第一类函数以及异步处理。 在...

    arcgis api for javascript 中文帮助文档和demo

    中文帮助文档是开发者在使用ArcGIS API for JavaScript时的重要参考资料,它详细地解释了各种函数、类、方法和属性,以及如何将它们应用于实际项目中。文档通常会按照功能模块划分,如地图操作、图层管理、服务调用...

    javascript写类方式之六

    尽管没有具体的代码,但可以想象它可能包含了一个使用上述类方式实现的JavaScript类。通过分析这个文件,我们可以学习到实际编程中类的运用,以及如何将理论知识应用到实践中。 总结起来,JavaScript的类方式多种...

    js代码-复习JavaScript中类的继承(ES6)

    在本教程中,我们将深入探讨JavaScript中的类继承,并通过`main.js`代码示例来理解这一核心概念。首先,让我们了解什么是类以及如何在JavaScript中定义它们。 在ES5及之前,JavaScript主要依赖于函数构造器和原型链...

Global site tag (gtag.js) - Google Analytics