原文: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”的内部工作方式。
分享到:
相关推荐
在 `WuYouUser` 类中,`NewArticle` 是一个方法,代表用户发表文章的行为。方法可以像访问属性一样调用,如: ```javascript Wo.NewArticle(); document.write(Wo.ArticleCount); ``` 这将增加 `ArticleCount` ...
在JavaScript中,类和继承是面向对象编程的重要概念。JavaScript是一种动态类型的语言,它没有像Java或C++那样的传统类,而是使用函数作为构造器来模拟类的行为,并通过原型链实现继承。本文将深入探讨JavaScript中...
本文实例讲述了javascript中类的定义方式。分享给大家供大家参考,具体如下: 类的定义包括四种方式: 1、工厂方式 function createCar(name,color,price){ var tempcar=new Object; tempcar.name=name; tempcar...
其它的面向对象程序设计语言都是通过关键字来解决继承的问题。但是javascript中并没有定义这种实现的机制。接下来通过本文给大家介绍Javascript中类式继承和原型式继承的实现方法和区别,需要的朋友可以参考下
JavaScript中的类继承 JavaScript中的类继承
通过这样的通用JavaScript类,开发者可以创建出更健壮、可维护的ASP.NET应用,同时提高开发效率。不过,随着技术的发展,现代Web开发中更多地倾向于使用库和框架(如jQuery、React、Vue等),它们提供了更高级别的...
在JavaScript中,可以使用类(Class)来实现面向对象编程(Object Oriented Programming)。不过,JavaScript中的类与Java中的有所不同,其相应的定义和使用也不一样。 JavaScript中类的定义 在JavaScript中,所有从同一...
9. **ES6及以后的新特性**:自ES6(ECMAScript 2015)开始,JavaScript引入了许多新特性,如箭头函数、模板字符串、let和const、解构赋值、Promise、类和模块等,大大增强了语言的表达力和可维护性。 10. **错误...
随着JavaScript的发展,ES6(ECMAScript 2015)引入了许多新特性,如类(class)、箭头函数(=>)、模板字符串(`)、解构赋值、模块(import/export)、Promise对象、生成器(generator)等,大大提高了代码的...
类是ES6引入的,它为JavaScript提供了面向对象编程的语法糖,但JavaScript的本质仍然是基于原型的继承。 JavaScript还支持异步编程,常见的有回调函数、Promise和async/await。回调函数常用于处理异步操作,如Ajax...
JavaScript类在Web开发中的应用广泛,它们允许我们创建复杂的数据结构,封装逻辑,以及实现面向对象的编程风格。在ASP.NET中,我们可以通过以下几种方式使用JavaScript类: 1. **定义和实例化JavaScript对象**:在...
类还可以包含方法,方法是类中可执行的函数。例如,给`WuYouUser`类添加一个`NewArticle`方法,表示用户发表文章的行为: ```javascript function WuYouUser() { this.Name; this.ArticleCount = 0; this.New...
JavaScript主要运行在浏览器环境中,用于增强用户界面,提供动态交互。它支持事件驱动、函数式以及基于原型的编程风格。JavaScript的核心特性包括弱类型、动态类型、基于原型的对象、第一类函数以及异步处理。 在...
中文帮助文档是开发者在使用ArcGIS API for JavaScript时的重要参考资料,它详细地解释了各种函数、类、方法和属性,以及如何将它们应用于实际项目中。文档通常会按照功能模块划分,如地图操作、图层管理、服务调用...
尽管没有具体的代码,但可以想象它可能包含了一个使用上述类方式实现的JavaScript类。通过分析这个文件,我们可以学习到实际编程中类的运用,以及如何将理论知识应用到实践中。 总结起来,JavaScript的类方式多种...
在本教程中,我们将深入探讨JavaScript中的类继承,并通过`main.js`代码示例来理解这一核心概念。首先,让我们了解什么是类以及如何在JavaScript中定义它们。 在ES5及之前,JavaScript主要依赖于函数构造器和原型链...