1.4 Javascript 不完整的继承
Javascript的继承和标准的oop继承有很大的区别,Javascript的继承是采用原型链的技术,
每个类都会将“成员变量”和“成员函数”放到 prototype 上,Js++都过superclass将其链接起来
即 C.prototype.superclass = C.superclass = P.prototype;
当 var c = new C()时,c.__proto__ = C.prototype ;
当 c访问“成员变量”时,如果在__proto__无法获取时,就会到C.prototype查找,如果又不存在,又会到父类的prototype查找,由于只有 __proto__ 是对象创建时分配的(每个对象独立分配),其他都是定义时分配的(每个对象共享),此时,如果访问C.prototype中“成员变量”是对象时,不修改“成员变量”的本身,而是修改“成员变量”对象的成员时,修改的“成员变量”对象的成员就会被所有对象实例共享,这样就违背类设计的初衷。
例如:
'package'.j(function () { 'class A'.j(function () { jpublic({ v:{a: 1} }); jprivate({ p:{a:1} }); jprotected({ x:{a:1} }); }); 'class B extends A'.j(function () { }); }); var b1 = new B(); b1.v.a = 5; b1.x.a = 5; var b2 = new B(); console.log(b1.v.a) // 输出为 5 console.log(b1.x.a) // 输出为 5 console.log(b2.v.a) // 输出也为 5,并不是预想的 1 console.log(b2.x.a) // 输出为 1 console.log(b2.p.a) // 不可用,会提示 p不存在
如何解决此问题了?
A. 将 v 这样的成员“成员变量”(其本身是对象)不在原型链上定义,而是在构造函数中调用,此时,创建对象实例时,就会在对象的__proto__上分配。
Js++提供了类似的方法,只要在jprivate中定义的“成员变量”或“成员函数”都会分配到对象的__proto__上,且只有本实例可用, jprotected中定义的“成员变量”(其本身是对象)也会分配到对象的__proto__上,且只有继承他的可用,
B. 原型链上只定义只读的“成员变量”(其本身是对象)
C.jpublic 定义的“成员变量”(其本身是对象)中的成员,只是只读成员,切记不可赋值,否则会在各个实例中共享。
相关推荐
通过本书第一章的学习,我们了解了JavaScript的起源、发展历程以及其在现代Web开发中的重要作用。从最初作为一种简单的脚本语言,到现在成为构建复杂Web应用的核心工具之一,JavaScript已经经历了巨大的转变和发展。...
- **全栈开发**:随着Node.js的出现,JavaScript不仅限于前端开发,还可以用于后端服务端的开发,使得开发者能够实现从前端到后端的全栈式开发。 ##### JavaScript的历史背景 JavaScript最初是由网景公司在1995年...
此外,文中提及了常见的开发工具和环境,如浏览器开发者工具、Node.js、包管理器、构建工具和代码编辑器,并展望了 JavaScript 在 WebAssembly 发展和语言规范更新下的未来趋势。; 适合人群:对编程语言感兴趣的初学...
软件测试基础班 JavaScript JS基础是软件测试的一门重要课程,本节课将对 JavaScript 的基础知识进行详细的介绍。 一、JavaScript 简介 JavaScript 是一种高级的、动态的、基于原型的编程语言,主要用于客户端的...
常用的开发工具有浏览器开发者工具、Node.js、包管理器、构建工具和代码编辑器。随着 WebAssembly、TypeScript 和新 ECMAScript 规范的推出,JavaScript 生态系统持续进化,未来将继续在前端和后端开发中发挥重要...
随着时间的推移,JavaScript逐渐成为Web开发中不可或缺的一部分,并发展出了多种框架和库,如React、Angular和Vue.js等,进一步推动了前端开发的进步。 #### 二、JavaScript的特点 - **脚本语言**:JavaScript是一...
- **第一章:JavaScript简介**:介绍JavaScript的发展历程、特点及其与Web浏览器的关系。 - **第二章:面向对象编程简介**:解释OOP的基本概念和原则。 - **第三章:JavaScript中的类和对象**:详细介绍如何使用...
JavaScript是Web开发中不可或缺的一部分,尤其在现代前端开发中扮演着至关重要的角色。这个"JavaScript核心"系列深入探讨了语言的各个方面,旨在帮助读者全面理解其内核。 1. **前言及概述**:作者通过自己的学习...
3. **普及与演变**:随着互联网的发展,JavaScript逐渐成为Web开发中不可或缺的一部分。特别是随着HTML5的推出,JavaScript的应用范围进一步扩大,不仅限于浏览器端,还能在服务器端使用(例如Node.js)。 #### 三...
JavaScript是一种广泛应用于网页开发的编程语言,它的出现极大地丰富了网页的交互性,并为现代Web应用程序的发展奠定了基础。...随着技术的不断进步,JavaScript仍将是前端开发领域不可或缺的重要语言。
由于文件内容不完整,部分章节的细节无法展开,但这些内容已经覆盖了JavaScript编程的核心概念和应用技术。在进一步深入学习和实践时,应参考完整的书籍内容来获取更详细的技术解释和应用实例。
JavaScript1.5参考手册是一部非常重要的资源,尤其对于那些致力于Web开发并希望深入理解...尽管现代的Web开发更多地依赖于更新的JavaScript版本和框架,但基础的JavaScript知识始终是每个前端开发者不可或缺的。
JavaScript的发展历程和其在Web开发中的核心地位,使其成为了不可或缺的工具。随着技术的不断进步,JavaScript的应用已经远远超出了Web浏览器的范畴,现在也被广泛用于服务器端开发、移动应用、桌面应用等领域,成为...
- **发展历程**:自1995年首次推出以来,JavaScript已经经历了多次版本更新,目前最新的标准是ECMAScript 2023。 - **运行环境**:JavaScript主要在浏览器环境中运行,同时也支持服务器端运行(如Node.js)。 #### ...
导论部分主要介绍了JavaScript语言的发展历程、基本语法以及编程风格。JavaScript的历史可以追溯到网景公司于1995年首次推出的LiveScript。该语言借鉴了Java语言的很多特性,并在随后的岁月里不断发展,成为今天Web...
JavaScript是一种广泛使用的网页脚本语言,它在互联网中扮演着非常重要的角色,尤其是在Web开发领域。它允许开发者在网页上实现复杂的交互功能,从而提高用户体验。JavaScript的核心概念包括闭包、面向对象、原型等...
综上所述,JavaScript 不仅是现代 Web 开发不可或缺的一部分,而且还在不断地拓展其应用领域和技术边界。对于任何想要从事前端开发或全栈开发的人来说,熟练掌握 JavaScript 都是一项极其重要的技能。
- **Node.js**: 随着Node.js的出现,JavaScript也开始在服务器端开发中大放异彩。Node.js提供了一个平台,使得JavaScript可以在服务器上运行,从而实现了前后端统一使用JavaScript的目标。 - **移动应用开发**: 通过...
JavaScript现在已经成为Web开发不可或缺的一部分,它不仅用于网页交互,还扩展到了服务器端(Node.js)、移动应用、桌面应用等多个领域。JavaScript的库和框架如jQuery、React、Angular和Vue.js等,极大地丰富了...