跳过 JS 核心(语言结构、数据类型、函数、对象、集合、字符串等)以及 BOM、DOM 部分,这个系列的笔记主要总结一下《王者归来》面向对象编程部分的知识点,以便梳理和查阅。
JavaScript 究竟是不是一种面向对象的语言呢?
“面向对象不是只有类模型一种,prototype-based(基于原型)是 class-based(基于类)的简化版,是一种 class-less 的面向对象。对应的,prototype 继承是 class 继承的简化版(例如省略了多重继承、基类构造函数、忽略了引用属性的继承等),但不能因为它不支持这些特性就不承认它是一种完整的继承。是否为继承添加额外的特性,开发者可以自由选择,但在不需要这些额外特性的时候,还是有理由尽量用 prototype-based 继承。
总而言之,prototype-based 认为语言本身可能不需要过分多的 reuse 能力,它牺牲了一些特性来保持语言的简洁,这没有错,prototype-based 虽然比 class-based 简单,但它依然是真正意义上的 object-oriented。”
I. 公有和私有 ── 属性的封装
JS中,函数是绝对的“第一型”,JS 的对象和闭包都是通过函数实现的。利用闭包的概念,JS 中可以有不逊色于其他各种面向对象语言的公有和私有特性:
function List(){
var m_elements = []; //私有成员,对象外无法访问
m_elements = Array.apply(m_elements, arguments);
//公有属性,可以通过“.”运算符或下标访问
this.length = {
valueOf : function(){return m_elements.length;},
toString : function(){return m_elements.length;}
}
this.toString = function(){
return m_elements.toString();
}
this.add = function(){
m_elements.push.apply(m_elements, arguments);
}
}
这个例子中 this.length, this.toString, this.add 是公有成员,其中 this.length 是私有成员 m_elements 的 length 属性的 getter,外部我们可以通过“.”运算符对这些属性进行访问。
对象的 getter 是一种特殊的属性,它形式上像是变量或者对象属性,但它的值随着传入参数的改变而改变。在不支持 getter 的语言中,我们通常用 get<Name> 方法来替代,其中 <Name> 是 getter 的实际名字,其效果与 getter 等价。ECMAScript v3 不支持 getter,但可以用上面这种构造带有 valueOf 和 toString 方法的对象来模拟 getter。
对象的 setter 是另一个相对应的属性,它的作用是通过类似赋值的方式改变对象的某些参数或者状态,遗憾的是,ECMAScript v3 不支持 setter,并且目前为止也没什么好的方法可以在 JS 中模拟 setter。要实现,只有通过定义 set<Name> 方法来实现:(
II. 属性和方法的类型
在 JS 里,对象的属性和方法支持 4 种不同的类型,下面通过一个例子来说明:
function myClass(){
var p = 100; //private property; 1. 私有属性
this.x = 10; //dynamic public property 2. 动态公有属性
}
myClass.prototype.y = 20; //static public property or prototype property 3. 静态公有属性或称原型属性
myClass.z = 30; //static property 4. 静态属性或称类属性
下面说下他们的特点和区别:
1. 私有属性上面已经提到,它的特点是对外界不开放,只能通过特定的 getter 和 setter 访问。实例化 myClass() 后,如果通过“.”运算符直接访问 p 会得到 undefined;
2. 动态公有属性的特点是外界可以访问,而且每一个对象实例持有一个副本,他们之间不会相互影响;
3. 原型属性的特点是每个对象实例共享唯一副本,对它的改写会相互影响;
4. 类属性的特点是作为类型的属性而不是对象实例的属性,也就是说不能通过对象实例的“.”运算符访问,那样会得到 undefined。上例中通过 myClass.z 直接访问即可。
有关 prototype 的知识点要放到下几篇,毕竟是 JS 面向对象编程的重点所在,内容比较多。简单预告一下第 2 篇笔记,包括 prototype 的使用技巧、实质及其范例。之后几篇会涉及继承和多态、构造和析构、包装对象、元类,类模板等。
本篇结尾以一个例子简述一下 prototype,“prototype 是在 IE 4 及其以后版本引入的一个针对于某一类的对象的方法,而且特殊点在于:它是一个给类的对象添加方法的方法”:
为本地对象 Number 添加数字阶乘方法:Number.fact()
实现:
Number.prototype.fact = function(){
var num = Math.floor(this);
if(num<0) return NaN;
else if(num==0 || num==1) return 1;
else return (num*(num-1).fact());
}
alert((10).fact()); //3628800
分享到:
相关推荐
通过阅读《王者归来之Thinking in Java读书笔记》,你可以系统地掌握Java编程的核心知识,理解编程思想,提高解决问题的能力。无论是初学者还是经验丰富的开发者,都能从中受益匪浅。这本书不仅提供了理论知识,还有...
《JavaScript王者归来》是针对JavaScript编程的一套深入学习资源,包含源码分析,旨在帮助开发者提升在JavaScript领域的技能。此压缩包中包含了三部分主要内容:《JavaScript王者归来》的教材内容、JavaScript高级...
《JavaScript王者归来》是一部深入探讨JavaScript编程语言的著作,旨在揭示其内在的神秘特性,并逐步引领读者从基础知识迈向高级主题。这部作品分为五个部分,全面覆盖了JavaScript的各个方面,不仅传授技术,更传递...
2. **对象**:JavaScript的对象是一种键值对的集合,它可以模拟传统面向对象编程中的类和实例。源代码中会展示如何创建和操作对象,包括使用对象字面量、构造函数、原型以及Object.create方法等。 3. **闭包**:...
6. Spring框架篇:Spring框架是Java企业级应用的核心,涵盖依赖注入、AOP(面向切面编程)、Spring MVC、Spring Boot等内容,为构建复杂的企业级应用提供强有力的支持。 7. EJB与Web服务篇:探讨Enterprise ...
【标题】"王者归来-HTML5與CSS3权威指南书范例" 提供了一套全面的HTML5和CSS3的学习资源,旨在帮助开发者深入理解这两种技术的核心概念与实践应用。HTML5是现代网页开发的标准,它引入了许多新的元素、属性和API,极...
《Linux C程序设计王者归来》是一本面向不同层次Linux学习者的权威指南,由吴岳等专家编著,并由清华大学出版社出版。这本书旨在帮助读者深入理解Linux操作系统下的C语言编程技术,无论你是初学者还是已有一定基础的...
Java王者归来源码 百度云 baidu 源码 提供下载链接密码
由于上传大小限制50M,因此分享的是我的百度网盘链接,下载后文本文件里有链接,包括Java Web整合开发王者归来整本书326.5M 的PDF文档以及54.7M的光盘源代码 本书简介: 资深Java程序员耗时一年时间写作,十年开发...
1. **Java基础**:Java作为Web开发的基石,基础部分会涉及Java语言的语法、面向对象编程概念、异常处理、集合框架(如ArrayList、LinkedList、HashMap等)以及IO流和多线程。这些是构建任何Java Web应用的必备知识。...
在众多技术分析工具中,“王者归来通达信指标公式源码”便是专为通达信交易平台设计的一款技术分析指标,它以简洁实用、思路清晰、买点准确而著称,旨在帮助投资者更加有效地进行交易决策。 “王者归来”指标的设计...
Spring框架负责管理应用程序的业务对象和事务控制,通过依赖注入(DI)和面向切面编程(AOP)来简化开发。Struts作为MVC设计模式的实现,主要处理HTTP请求和视图展示,它协调控制器、模型和视图,使得各个部分职责...
Evony: The Kings Return 伊芙妮:王者归来 Unity无尽射击游戏项目源码C# 支持Unity版本2022.3.9f1及以上 商品描述 描述 热门游戏 Evony:王者归来 Unity 游戏源代码,具有无尽的游戏玩法以及炫酷的图形和动画。还带...
java web开发王者归来源码,由于压缩好后是72.8M,这是第1部分的源码。
《王者归来之经典篇—ThinkInJava4Th中文版课后习题答案》是一份针对经典编程书籍《Thinking In Java》第四版的中文版课后习题解答集。这本书由Bruce Eckel撰写,是Java编程领域的一本权威之作,深入浅出地介绍了...
【王者归来】是一款基于J2ME(Java Micro Edition)平台开发的手机游戏源码,它展示了如何在有限的资源和性能限制下,构建一个具有趣味性的过关类游戏。J2ME是Java的一种轻量级应用平台,主要用于移动设备、嵌入式...
其面向对象的特性、强大的内存管理以及丰富的类库,使得Java成为Web开发的首选语言之一。本书将深入讲解如何利用Java技术进行Web应用的设计、开发与优化。 Web开发涵盖了前端界面设计、后端服务器处理以及数据库...
《Java Web整合开发王者归来》是一本专注于Java企业级应用开发的著作,主要涵盖了Spring、Struts和Hibernate(SSH)三大框架的集成与应用。这本书的41章源码提供了丰富的示例,帮助读者深入理解这三大框架如何协同...
【Java Web王者归来41章论坛系统源码详解】 Java Web技术是开发Web应用程序的核心工具,尤其在企业级应用中占据重要地位。本资源“Java Web王者归来41章论坛系统源码”提供了完整的论坛系统实现,对于学习和理解...