[原创] JavaScript面向对象编程(2) :继承和封装

js:面向对象编程,带你认识封装继承多态 本文首发于我的个人网站:http://cherryblog.site 周末的时候深入的了解了下javascript面向对象编程思想,收获颇丰,感觉对面向对象编程有了那么一丢丢的了解了~很开森什么是面向对象编程 先上一张图,可以对面向对象有一个大致的了解,然而什么是面向对象呢,用java中的一句经典语句来说就是:万事万物皆对象。 面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完 阅读详情

      在很久很久以前,我发布了一篇博文探讨了如何用JavaScript实现简单的继承,详见 [ JavaScript面向对象编程(1) :继承 ] .这种方式对我来说直观而容易理解,有效防止侧漏又不伤手,让我整夜安睡,所以我一直在用它,嘿,还真对得起咱这张脸.

 

    但它有一个很大的缺点: 所有的方法变量都是暴露在外的,都能随意访问,这一点都不符合面相对象编程的"封装"的要求嘛!作为追求完美的我,可以容忍goto语句,可以容忍i,j,k,l,mm,hhh这样的变量名称,可以容忍一个函数包含3000多行代码,可以容忍<爱情买卖>,可以容忍铺天盖地的"给力",但是!我!怎么能!容忍!OOP的三大基本特征遭到亵渎?! 不知道OOP的三大基本特征? 不知道? 真不知道? ..........那你来这儿干什么?

 

   所以后来我又构思了一种方案,可以解决上面这个问题.

   这个新方案使用了闭包技术(你又不知道闭包?.....吐血中...), 有以下特性:

 

1   跟前一个方案一样,在在"构造函数"(嗯,就是你自己为了定义一个对象而写的那个函数啦---怎么这么拗口)第一行必须调用工具函数Class()来添加对继承,重载以及封装的支持.当然这个函数的代码与第一个方案是不同的,等会儿我会给出这个函数的代码

2  用public.函数名=function(...){...}的形式来定义"公有函数",公有函数就是...,不说了,你懂得.
3  用局部变量方式定义"私有成员",这里加上引号是指并不是真正意义上的私有成员,只是与私有成员类似,外部使用者不可见.

4  公有函数可以直接用名称调用"私有成员",但必须用this.函数名来调用其它公有函数.

5 "私有函数"可以直接用名称调用"私有成员",但必须用public.函数名来调用公有函数.

6  父对象的公有函数可用父对象名_函数名的方式使用

7 最后必须用return NewInstance();来得到真正的对象的实例(我叫它接口,:p),等会儿我会给出函数NewInstance的代码.

8 生成实例时可以用new也可以不用.如

   var myClass = new MyClass();

   和

   var myClass = MyClass();

都有效

 

可以看出4和5是这个方案的硬伤,曾经让我几乎要无情的抛弃这个方案.不过我已经对解决它们有了一些头绪,在不久的将来(就三五年吧)我会解决它们.

 

  下面是最关键的函数ClassNewInstance的代码,从这两个函数可以看出,实际上我是在"构造函数"中创建了一个名叫public的局部对象,并把所有希望能够在外部访问的函数(包括父对象的)都添加到public,然后将public作为真正的对象的实例返回到外部,根据闭包原理"构造函数"中的局部变量和函数和public在同一个作用域,所以public的函数可以访问"构造函数"中的局部变量和函数,但其他外部函数和代码则不能.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

下面是使用方法的示例代码

 

 

 

浅谈js的常用继承封装多态 好久没有写博客了,以前对js的继承都很模糊,最近重新整理了些资料重新温习了一下! 首先什么是构造函数?什么是原型?什么是实例化对像?,继承实例化对象有什么区别?继承方式有哪些?各自有什么区别优缺点?各自原理是什么?等等,下面我来从浅入深的来一 一介绍下,下面是我的个人见解,如有不对之处,请指正,谢谢! javaSctript是门弱语言,没有类的概念,但是我们可以像其他语言一样可以模拟类的概念 ... 阅读详情

相关推荐

Javascript继承封装

Javascript继承2章 写的都是看到的—面向对象编程 2.1 两种编程风格 ----面向过程与面向对象 面向过程:直接实现功能,面向结果过程,参数为实现特定功能的必须参数 面向对象:将对象进行特征分析,将方法方法进行封装,主要思想有:封装继承,多态(但js里考虑的比较少),并且类Class的概念在ES6的时候才出现,之前都是通过一些js的特性进行相关概念的模拟 2.2 ...

qq_31189489的博客 271

面向对象编程:如何在 JavaScript 中实现 OOP

🤍 前端开发工程师、技术日更博主、已过CET6🍨、23年度博客之星前端领域TOP1🕠高级专题作者、打造专栏🍚签约作者、上架课程💬 前些天发现了一个巨牛的,通俗易懂,风趣幽默,忍不住分享一下给大家。。

你若盛开,清风自来 2160

[JavaScript] 面向对象编程

通过类与对象的概念,可以更好地模拟现实世界的实体,提升代码的可重用性、可维护性扩展性。JavaScript面向对象编程非常灵活,类的引入让代码更加清晰直观。多态是指不同的类在调用相同方法时,可以表现出不同的行为。静态方法是直接定义在类上的方法,而不是在实例上的方法。在 JavaScript 早期,使用函数原型链实现面向对象的思想,语法复杂且容易出错。继承允许我们定义一个类,继承另一个类的属性方法,从而实现代码复用。是用来定义对象蓝图的关键字,其中包含对象的属性方法。调用父类的构造函数。

kevin_blog 1932

JS面向对象编程之:封装继承、多态

   最近在实习公司写代码,被隔壁的哥们吐槽说,代码写的没有一点艺术。为了让我的代码多点艺术,我就重新温故了《javascript高级程序设计》(其中几章),然后又看了《javascript设计模式》,然后觉得要写点心得体会,来整理自己所学的吧。以下是我个人见解,错了请轻喷,欢迎指出错误,乐于改正。         一、封装       (1)封装通俗的说,就是我有一些秘密不想让人知道...

smile的博客 420

JS面向对象的核心概念:封装继承多态——什么是封装?什么是继承多态。什么是对象原型,它是怎么通过对象原型实现封装继承的?什么又是原型链,又怎么通过原型链实现多态?

封装:将数据行为封装在对象中,通过接口与外部交互,隐藏内部细节。继承:子类可以继承父类的属性方法,避免重复代码。多态:子类可以重写父类的方法,同样的方法在不同对象上表现出不同的行为。对象原型:对象通过原型实现继承,每个对象都有一个原型,方法属性通过原型链共享。原型链:对象通过原型链进行属性方法的查找,沿着链条直到。

m0_73487394的博客 1095

JS面向对象编程

面向对象编程思想 面向对象编程是一种编程思想,这种思想有几个主要的特性,分别体现在以下四方面: 抽象:提取现实世界中某事物的关键特性,为该事物构建模型的过程。对同一事物在不同的需求下,需要提取的特性可能不一样。得到的抽象模型中一般包含:属性(数据)操作(行为)。这个抽象模型我们称之为类。对类进行实例化得到对象。 封装封装可以使类具有独立性隔离性;保证类的高内聚。只暴露给类外部或者子类必须的...

阳光下的冷静的博客 2164

JavaScript 面向对象编程:原型链、继承封装的深入理解

JavaScript 中,对象是属性的无序集合,属性是 “名 / 值” 对,值可以是函数(此时该属性被称为方法)。JavaScript 提供了多种创建对象的方式。字面量方式:这是最常用、最直观的创建对象的方式。通过花括号 {} 直接定义对象,并在其中添加属性方法。例如:age: 25,在上述代码中,person 是一个对象,它包含了 name age 两个属性,以及 sayHello 方法。通过 person.sayHello() 就可以调用该方法,输出问候语。构造函数方式。

数字魔方操控师的博客 748

JavaScript三大特性,继承封装多态

javascript的相关特性 一.、面向对象的三大特性:继承封装多态 作为基于对象的语言,js自然可以实现OOP语言的大部分特征。 继承:js没有类的概念,自然不能像php那样封装class然后继承最后new对象。但是js的继承却有更多的方式。在此讨论最常用的,也就是基于原型对象原型链继承。在js中,函数对象就相当于类,在函数对象中有一个prototype属性指向了函数对象的原型对象。在函

nappingCat_Wang的博客 2598

JS面向对象三大特点封装继承、多态

JS面向对象三大特点封装继承、多态1.封装2.继承3.多态 1.封装 定义:创建一个对象,集中存储一个事物的属性功能。 为什么:便于维护。 何时:只要使用面向对象,都要先创建对象,再按调用对象的方法执行操作。 如何创建:3种 1.用对象直接量 var obj = { 属性名1:属性值1, 属性名2:属性值2, 方法名:function(){ ...this.属性名... } } 对象自己的方法 ,访问自己的属性如果不加this,仅会在作用域中查找,不会在对象中查找。 要访问自己的属性:t

qq_41179562的博客 1992

JavaScript面向对象编程实战

面向对象编程(OOP)JavaScript中非常重要的一个概念。掌握OOP可以帮助我们写出更加清晰、可维护的代码。本文将详细介绍JavaScript实现OOP的几种主要方式,并通过实例展示OOP在实际编程中的强大威力。​通过本文的讲解,我们已经全面了解了JavaScript实现面向对象编程的几种主要方式,包括构造函数、原型继承、类继承等。面向对象编程是现代JavaScript的基石,可以帮助我们编写出更加清晰、可复用可维护的代码。

爱蹦跶的全栈大A阿 1431

面向对象编程核心:从封装继承、多态到JavaScript实践

面向对象编程OOP)是一种基于对象类的编程范式,通过封装继承多态三大支柱构建可维护的软件系统。其核心原理是将数据与操作数据的方法捆绑为对象,类作为对象的蓝图实现代码复用。这一编程思想的技术价值在于提升代码的组织性、可扩展性可维护性,通过封装保护数据完整性,继承实现层次化设计,多态提供灵活的行为扩展。在应用场景上,OOP广泛应用于前端组件化、后端业务建模、游戏开发等领域。本文以JavaScript ES6+为例,深入解析如何通过class语法实现封装继承多态,并结合工厂模式、单例模式等设计模式,

weixin_30512965的博客 247

JavaScript 面向对象编程 (封装继承、多态)

JavaScript 面向对象编程封装继承、多态)学习书籍:《JavaScript 设计模式》封装属性概念属性概念的模拟实现 - 类类创建对象的安全模式继承类式继承构造函数继承组合继承原型式继承寄生式继承寄生组合式继承相关问题多继承多态代码 学习书籍:《JavaScript 设计模式》 封装 属性概念 私有成员(属性/方法) 公有成员 静态成员 实例成员 保护方法 属性概念的模拟实现 - 类 Book类的实现(构造函数 ) 静态属性:原型属性或闭包实现的局部变量(只用赋值一次) 实例属性:构造函数

weixin_41837346的博客 289

js之面向对象编程封装 继承 多态(详细篇)

什么是面向对象编程 面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。 面向对象面向过程的区别 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。 面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问...

咖啡味的小认真 748

JavaScript高级:js中面向对象编程

JavaScript高级:js中面向对象编程:1 引言;2 封装性;3 原型;4 数组扩展案例--> 求 最大值;5 原型对象中的constructor属性;6 对象原型;7 对象原型中的constructor属性;8 上述总结;9 原型继承;10 原型链

xiaoxie_life_study 1349

javascript面向对象编程,带你认识封装继承多态

原文链接:点我 周末的时候深入的了解了下javascript面向对象编程思想,收获颇丰,感觉对面向对象编程有了那么一丢丢的了解了~很开森 什么是面向对象编程 先上一张图,可以对面向对象有一个大致的了解,然而什么是面向对象呢,用java中的一句经典语句来说就是:万事万物皆对象。面向对象的思想主要是以对象为主,将一个问题抽象出具体的对象,并且将抽象出来的对象对象的属性方法封装成一个...

weixin_30384031的博客 102

如何构建健壮的JavaScript代码:JS Raccoon的面向对象编程教程

JavaScript开发中,面向对象编程OOP)是构建健壮、可维护代码的核心技术之一。JS Raccoon项目提供了丰富的面向对象编程指南,帮助开发者理解从基础概念到实战应用的完整流程。本文将通过JS Raccoon的教程,带你掌握JavaScript面向对象编程的精髓,创建更加模块化可扩展的代码结构。 ## 理解JavaScript中的数据类型:基础中的基础 🧱 JavaScript

gitblog_00558的博客 642
上一篇: [原创] 脚本与批处理合二为一-----(2)Perl篇
下一篇: Windows XP 优化方案
codemon
博客等级 码龄26年 3粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值