`

不错的JavaScript面向对象的简单入门介绍第2/2页

阅读更多
JavaScript是一门OOP,而有些人说,JavaScript是基于对象的。

4) 方法
以下例子引用于<<__JavaScript: The Definitive Guide>>
function Rectangle_area( ) { return this.width * this.height; }
function Rectangle_perimeter( ) { return 2*this.width + 2*this.height; }
function Rectangle_set_size(w,h) { this.width = w; this.height = h; }
function Rectangle_enlarge( ) { this.width *= 2; this.height *= 2; }
function Rectangle_shrink( ) { this.width /= 2; this.height /= 2; }
function Rectangle(w, h)
{
this.width = w;
this.height = h;
this.area = Rectangle_area;
this.perimeter = Rectangle_perimeter;
this.set_size = Rectangle_set_size;
this.enlarge = Rectangle_enlarge;
this.shrink = Rectangle_shrink;
}
这种风格可能和Java,c++很不同。方法中的this表示调用它的对象的引用。


5) prototype
prototype是一个对象,每个类都包含一个prototype对象(注意,每个类一个,而不是每个对象一个)。
看看下面的例子:
function User(name)
{
this.name = name
}
User.prototype.name = "killercat" // 类名.prototype.属性(或方法)
user = new User("who"+"<br />")
document.write(user.name)
delete user.name
document.write(user.name)

再看一个例子:
function User(name)
{
}
User.prototype.name = "human"
user1 = new User()
user2 = new User()
document.write(user1.name+"<br />")
document.write(user2.name)
结果:
human
human
说明了,每个类一个prototype对象,而不是每个对象单独一个。

obj.x 这条语句的查找顺序是,先在obj中找x属性,假如没有,再进入obj对应的类中找prototype.x,对于方法来说,也一样。因此,不要出现这样的语句: user.prototype.name = "xxx" 必须是 user.name = "xxx" (prototype对象属于一个类,而不是一个对象)

类名.prototype.属性 // 相当于一个实例变量(属性),对方法也一样
类名.属性 // 相当于一个静态变量(属性),对方法也一样,调用的时候必须使用"类名.属性",不能使用"类对象.属性",因为它属于一个类,而不是一个对象。
例如:
function User(name)
{
this.name = name
}
User.type = "human"

user = new User("kc")
document.write(User.type + "<br />")
document.write(user.type)
结果:
human
undefined

另外,每个prototype都有一个constructor属性,默认用于保存constructor的定义,例如上面的user对象,调用:
user.constructor得到:
function User(name) { this.name = name; }
我们可以通过typeof,知道参数的类型,假如是对象,就返回"object",假如是方法就返回"function"

6) 利用prototype实现类间的继承,例如:
// 父类
function Circle(r){
this.r = r;

}
Circle.PI = 3.14;
Circle.prototype.getArea = function (){
return Circle.PI * this.r * this.r;
};
Circle.prototype.toString = function (){
if(( typeof this == "object") && (this.constructor == Circle)){
return "circle with a radius " + this.r ;
}
else{
return "unknown object";
}
};
Circle.max = function (c1,c2){
return c1.r >= c2.r ? c1 : c2;
};

// 子类
function ColorCircle(r,color){
this.r = r;
this.color = color;
}
ColorCircle.prototype = new Circle(0); // 保存父类的对象
ColorCircle.prototype.constructor = ColorCircle; // 为constructor 改名字
ColorCircle.prototype.toString = function(){
if(( typeof this == "object") && (this.constructor == ColorCircle)){
return this.color+" circle with a radius " + this.r ;
}
else{
return "unknown object";
}
}
ColorCircle.prototype.getColor = function(){
return this.color;
}
ColorCircle.prototype.setColor = function(color){
this.color = color;
}

也就是,使用prototype保存父类的对象,在构造子类的时候,父类对象同时被构造(因为prototype被构造)。也就是JavaScript继承其实就是让子类的prototype对象保存父类的对象。
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    不错的JavaScript面向对象的简单入门介绍第1/2页

    标题中提到的“JavaScript面向对象的简单入门介绍”,说明这是一篇面向初学者的文章,旨在帮助读者理解JavaScript中的面向对象编程(OOP)基础概念。JavaScript是一种多范式编程语言,它支持面向对象、命令式、声明...

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

    - **第二章:面向对象编程简介**:解释OOP的基本概念和原则。 - **第三章:JavaScript中的类和对象**:详细介绍如何使用JavaScript创建类和对象。 - **第四章:继承**:探讨JavaScript中实现继承的不同方式。 - **第...

    JavaScript面向对象编程指南 第2版 高清 带索引书签目录_样章.pdf

    从所提供的文件信息中,我们可以总结以下几点与“JavaScript面向对象编程指南 第2版 高清 带索引书签目录_样章.pdf”相关的重要知识点。 首先,该文件提到的书籍是关于JavaScript面向对象编程的,面向对象编程...

    JavaScript 面向对象入门精简篇第1/2页

    JavaScript的面向对象编程是其强大的特性之一,它主要围绕三个核心概念:封装、继承和多态。在这篇文章中,我们将深入探讨这些概念,并通过代码示例来理解它们在JavaScript中的应用。 **封装**是面向对象编程的基础...

    javascript 快速入门教程,javascript面向对象编程

    ### JavaScript 快速入门教程与面向对象编程 #### 一、概要 JavaScript 是一种广泛应用于网页开发中的脚本语言,具有轻量级、解释型等特点。它可以在客户端执行,无需服务器支持,使得网页能够更加动态和交互。 ##...

    JavaScript从入门到精通(第2版)PPT.7z

    在“JavaScript从入门到精通(第2版)PPT”这套教学资料中,我们将深入探讨JavaScript的核心概念、语法特性以及实际应用。 1. **基础概念** - **变量与数据类型**:JavaScript支持基本数据类型(如字符串、数字、...

    JavaScript面向对象编程指南

    这本书通俗易懂,非常适合0基础入门,不仅教会你知识,还教会你学习的方法,语言非常的亲切,就像一个智者在言传身教一样。本电子书是PDF高清版,看着很舒服。

    《JavaScript从入门到精通(第2版)》.( (美)Steve Suehring).[PDF].&ckook;

    这本书《JavaScript从入门到精通(第2版)》,作者Steve Suehring,提供了全面深入的JavaScript学习指导。第二版通常意味着更新了最新的技术信息,以适应不断发展的Web开发环境,比如ES6(ECMAScript 2015)及后续...

    JavaScript从入门到精通(第2版)( (美)Steve Suehring)中文pdf扫描版-2

    本书《JavaScript从入门到精通(第2版)》由Steve Suehring撰写,专为想要深入理解并掌握JavaScript的初学者和进阶者设计。它涵盖了JavaScript的基础概念、语法特性以及高级应用,旨在帮助读者构建坚实的JavaScript...

    JavaScript书籍(JavaScript从入门到精通(第2版).pdf+高性能JavaScript.pdf)

    "JavaScript从入门到精通(第2版)" 是一本适合初学者的教程,它详细介绍了JavaScript的基本语法和概念,如变量、数据类型、控制流、函数、对象和数组等。此外,它还涵盖了DOM操作、事件处理、AJAX异步通信以及面向...

    JavaScript从入门到精通(第2版)书籍和源代码实例

    本书《JavaScript从入门到精通(第2版)》旨在帮助初学者和有经验的开发者深入理解和掌握这门语言,从而提升技能水平。通过阅读本书和实践其中的源代码实例,读者将能够全面了解JavaScript的核心概念和技术。 首先...

    JavaScript教程--从入门到精通(PPT精简版)

    2. **基于对象**:JavaScript允许开发者操作和创建对象,但与面向对象语言(如Java)不同,JavaScript是基于对象而不是完全面向对象的,这意味着它不强制使用类来创建对象。 3. **简单性**:JavaScript语法简洁,...

    javascript从入门到精通.rar

    你可以创建自定义对象,使用构造函数和原型链实现面向对象编程。另外,JavaScript还支持闭包,这是一种强大的特性,可以用来封装变量和保护隐私。 在进阶内容中,你将接触到异步编程,如回调函数、Promise和async/...

    Javascript 程序设计基础教程(第2版)_PPT

    总的来说,《JavaScript程序设计基础教程(第2版)_PPT》涵盖了JavaScript的基础语法、核心概念、面向对象编程以及最新特性的介绍,是初学者入门和进阶的理想资料。通过深入学习,你可以掌握创建动态网页和网络应用所...

    javascript入门教程

    通过这个"JavaScript入门教程",初学者将能够建立起坚实的JavaScript基础,掌握其基本语法、面向对象特性以及常用的内置对象,为进一步学习高级概念和框架如React、Vue、Angular等打下坚实的基础。不断实践和深入...

    javascript入门实例

    1. 类与模块:ES6引入了类的概念,使得面向对象编程更加简洁。同时,模块系统允许代码按需导入和导出,提高了代码组织和重用性。 2. 解构赋值:可以从数组或对象中提取值并赋给变量,简化了代码。 3. 扩展运算符与...

Global site tag (gtag.js) - Google Analytics