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

[Js++开发历程] Javascript 不完整的继承

    博客分类:
  • Js++
 
阅读更多

 

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 定义的“成员变量”(其本身是对象)中的成员,只是只读成员,切记不可赋值,否则会在各个实例中共享。

 

0
0
分享到:
评论

相关推荐

    精通javascript+jquery电子书第一章pdf

    通过本书第一章的学习,我们了解了JavaScript的起源、发展历程以及其在现代Web开发中的重要作用。从最初作为一种简单的脚本语言,到现在成为构建复杂Web应用的核心工具之一,JavaScript已经经历了巨大的转变和发展。...

    廖雪峰-JavaScript教程-PDF版

    - **全栈开发**:随着Node.js的出现,JavaScript不仅限于前端开发,还可以用于后端服务端的开发,使得开发者能够实现从前端到后端的全栈式开发。 ##### JavaScript的历史背景 JavaScript最初是由网景公司在1995年...

    Web开发JavaScript核心技术解析:编程特性、应用领域及开发工具综述

    此外,文中提及了常见的开发工具和环境,如浏览器开发者工具、Node.js、包管理器、构建工具和代码编辑器,并展望了 JavaScript 在 WebAssembly 发展和语言规范更新下的未来趋势。; 适合人群:对编程语言感兴趣的初学...

    软件测试 基础班 JavaScript JS基础.ppt

    软件测试基础班 JavaScript JS基础是软件测试的一门重要课程,本节课将对 JavaScript 的基础知识进行详细的介绍。 一、JavaScript 简介 JavaScript 是一种高级的、动态的、基于原型的编程语言,主要用于客户端的...

    编程语言JavaScript核心技术解析:从网页交互到全栈开发的应用与特性综述

    常用的开发工具有浏览器开发者工具、Node.js、包管理器、构建工具和代码编辑器。随着 WebAssembly、TypeScript 和新 ECMAScript 规范的推出,JavaScript 生态系统持续进化,未来将继续在前端和后端开发中发挥重要...

    Javascript教程--从入门到精通【完整版】

    随着时间的推移,JavaScript逐渐成为Web开发中不可或缺的一部分,并发展出了多种框架和库,如React、Angular和Vue.js等,进一步推动了前端开发的进步。 #### 二、JavaScript的特点 - **脚本语言**:JavaScript是一...

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

    - **第一章:JavaScript简介**:介绍JavaScript的发展历程、特点及其与Web浏览器的关系。 - **第二章:面向对象编程简介**:解释OOP的基本概念和原则。 - **第三章:JavaScript中的类和对象**:详细介绍如何使用...

    javascript核心

    JavaScript是Web开发中不可或缺的一部分,尤其在现代前端开发中扮演着至关重要的角色。这个"JavaScript核心"系列深入探讨了语言的各个方面,旨在帮助读者全面理解其内核。 1. **前言及概述**:作者通过自己的学习...

    JavaScript-关于JavaScript的学习了解

    3. **普及与演变**:随着互联网的发展,JavaScript逐渐成为Web开发中不可或缺的一部分。特别是随着HTML5的推出,JavaScript的应用范围进一步扩大,不仅限于浏览器端,还能在服务器端使用(例如Node.js)。 #### 三...

    李炎恢JavaScript合并版

    JavaScript是一种广泛应用于网页开发的编程语言,它的出现极大地丰富了网页的交互性,并为现代Web应用程序的发展奠定了基础。...随着技术的不断进步,JavaScript仍将是前端开发领域不可或缺的重要语言。

    JavaScript核心及实践

    由于文件内容不完整,部分章节的细节无法展开,但这些内容已经覆盖了JavaScript编程的核心概念和应用技术。在进一步深入学习和实践时,应参考完整的书籍内容来获取更详细的技术解释和应用实例。

    JavaScript1.5参考手册chm

    JavaScript1.5参考手册是一部非常重要的资源,尤其对于那些致力于Web开发并希望深入理解...尽管现代的Web开发更多地依赖于更新的JavaScript版本和框架,但基础的JavaScript知识始终是每个前端开发者不可或缺的。

    JavaScript_1_JS基本语法.docx

    JavaScript的发展历程和其在Web开发中的核心地位,使其成为了不可或缺的工具。随着技术的不断进步,JavaScript的应用已经远远超出了Web浏览器的范畴,现在也被广泛用于服务器端开发、移动应用、桌面应用等领域,成为...

    [javascript实例自学手册:通过486个例子掌握WEB开发捷径].

    - **发展历程**:自1995年首次推出以来,JavaScript已经经历了多次版本更新,目前最新的标准是ECMAScript 2023。 - **运行环境**:JavaScript主要在浏览器环境中运行,同时也支持服务器端运行(如Node.js)。 #### ...

    javascript标准参考教程_阮一峰

    导论部分主要介绍了JavaScript语言的发展历程、基本语法以及编程风格。JavaScript的历史可以追溯到网景公司于1995年首次推出的LiveScript。该语言借鉴了Java语言的很多特性,并在随后的岁月里不断发展,成为今天Web...

    JavaScript内核系列

    JavaScript是一种广泛使用的网页脚本语言,它在互联网中扮演着非常重要的角色,尤其是在Web开发领域。它允许开发者在网页上实现复杂的交互功能,从而提高用户体验。JavaScript的核心概念包括闭包、面向对象、原型等...

    JavaScript 的语言简要介绍.docx

    综上所述,JavaScript 不仅是现代 Web 开发不可或缺的一部分,而且还在不断地拓展其应用领域和技术边界。对于任何想要从事前端开发或全栈开发的人来说,熟练掌握 JavaScript 都是一项极其重要的技能。

    JavaScript参考手册

    - **Node.js**: 随着Node.js的出现,JavaScript也开始在服务器端开发中大放异彩。Node.js提供了一个平台,使得JavaScript可以在服务器上运行,从而实现了前后端统一使用JavaScript的目标。 - **移动应用开发**: 通过...

    javascript的真实历史

    JavaScript现在已经成为Web开发不可或缺的一部分,它不仅用于网页交互,还扩展到了服务器端(Node.js)、移动应用、桌面应用等多个领域。JavaScript的库和框架如jQuery、React、Angular和Vue.js等,极大地丰富了...

Global site tag (gtag.js) - Google Analytics