javascript 是一门很灵活的语言,也是一门有缺陷的语言.
比如我们今天要谈的,如何用面向对象的手法来封装javascript ,javascript是没有类的概念的.
所以今天谈到的封装,其实就是用javascript的函数来实现的.
var People{ name:'一介布衣', age:'30' };
这就是javascript中的一个对象,里面封装了2个属性.
实例化一个对象的实例 people
var people=new People(); console.log(people.name,people.age); //一介布衣,30
如果我们需要在函数里返回一个对象,如下代码:
function CreatePeople(){ return { name:'一介布衣', age:'30' }; }
在代码中需要创建一个人的时候,我们需要调用 CreatePeople 即可,但是有一个问题,就是我们得到的都是同一个人 一介布衣,30岁.看来需要我们改造一个函数.
function CreatePeople(name,age){ return { name:name, age:age } }
这看上去貌似好多了.我们实例化2个对象.
var p1=new CreatePeople('张三',19); var p2=new CreatePeople('李四',25);
我们知道javascript从object 到其他全局类都有一个prototype对象指向原型链.
但是,p1,p2 俩个对象貌似没有一点关系,虽然被同一个函数创建,但是CreatePeople 每次返回一个全新的对象,看似 p1,p2关系不大.
如果你接触过面向对象语言的编程,这时应该想到了构造函数,但是上面的 CreatePeople 函数怎么看都不是一个构造函数,我们也可以用javascript的函数来生成一个构造函数.
function CreatePeople(name,age){ this.name=name; this.age=age; }
this 和其他语言一样,也是一个指向实例的指针变量.
当用此构造函数创建对象的时候,this就指向新创建的对象,有一点需要记住,this取决调用函数作用域,而不是使用函数的作用域.
这样封装一下构造函数,生成的对象就比上面看上去顺眼多了.
2个属性指向了this实例指针,我们再来一个方法,去获取属性(也可以理解为私有变量)
function CreatePeople(name,age){ this.name=name; this.age=age; this.getName=function(){ return this.name; } }
getName 方法很简单,就是返回对象中的 name 属性值.
实例化2个对象
var p1=new CreatePeople('张三',20); var p2=new CreatePeople('李四',21); console.log(p1.getName()) //张三 console.log(p2.getName()) //李四
这时感觉封装的高大上的感觉,其实我们没有发现,CreatePeople 构造函数中的 getName 函数干的活很简单,但是每次都在实例上创建一个这样的函数确实有点浪费内存了,我们看下面的代码.
console.log(p1.getName==p2.getName); //false
返回false ,告诉我们 p1,p2 中的 getName 不是指向内存中的一个地址,我们为了节省内存,如何让CreatePeople 构建出来的对象,多有 getName 方法指向一个指针地址? 对,Object 的原型链上.
我们把这个方法定义在构造函数的原型链上,这样构造的新对象都会继承原型链上的这个方法,(具体的javascript中的继承我们单独开一篇博文来讨论)
function CreatePeople(name,age){ this.name=name; this.age=age; } CreatePeople.prototype.getName=function(){ return this.name; } var p1=new CreatePeople('张三',20); var p2=new CreatePeople('李四',21); console.log(p1.getName==p2.getName); //true
可以看到p1 和 p2 对象都继承来自 CreatePeople 原型上的 getName 方法,而且所有对象的此方法指针都指向了一个地址.
这样,我们封装的目的就达到了.
原文:http://yijiebuyi.com/blog/4af8f11507e2eeb550bbdfbe3677d4c0.html
相关推荐
### JavaScript面向对象进阶知识点详解 #### 8.1 面向对象编程的基本特性 在探讨面向对象的JavaScript之前,我们首先需要了解面向对象编程(Object-Oriented Programming, OOP)的基本特性:封装性、抽象性、继承...
在提供的资源中,《代码之美》PDF文件可能包含了关于编程实践和代码风格的指导,而《Javascript面向对象编程》PPT可能更具体地阐述了JavaScript OOP的细节和示例。学习这些材料将有助于深入理解JavaScript的面向对象...
- **第五章:封装和私有性**:讲解如何在JavaScript中实现封装以及保护私有数据的方法。 - **第六章:多态**:讨论多态性的概念及其在JavaScript中的应用。 - **第七章:混合式编程**:介绍如何结合面向对象编程与...
在JavaScript中,我们通常使用类(class)来实现面向对象的概念。Axios是一个基于Promise的HTTP库,它在前端开发中广泛用于发送HTTP请求。当我们需要对Axios进行面向对象的封装时,主要是为了提高代码的复用性和可...
在JavaScript中,可以使用闭包和私有变量来实现封装。 - **继承**:继承使得一个对象可以直接使用另一个对象的属性和方法。JavaScript中的继承主要通过原型链实现。 - **多态性**:多态性是指不同对象可以响应相同的...
JavaScript面向对象技术在实现树形控件中扮演着至关重要的角色。树形控件是一种用于展示层次型数据的用户界面元素,它具有扩展和折叠功能,可以在有限的空间内清晰地展示大量的信息,使得数据间的层级关系一目了然。...
本文介绍了JavaScript面向对象编程的基本概念和技术细节,包括变量和对象的基础用法、函数的作用以及如何通过封装和继承来构建复杂的对象层次结构。JavaScript的独特之处在于它的灵活性和动态性,这使得它成为了一种...
在JavaScript中,我们可以使用闭包来实现封装,限制对外部的访问。 通过理解并熟练运用这些面向对象的概念和技术,开发者可以更好地组织代码,提高代码的复用性和可维护性。JavaScript 面向对象程序设计——继承与...
JavaScript是一种广泛...通过深入学习这本《JavaScript面向对象编程指南(第2版)》,开发者不仅能掌握JavaScript的面向对象编程基础,还能了解到实际项目中如何有效地运用这些知识,提升编程技巧和解决问题的能力。
在JavaScript中,可以通过闭包来实现封装,就像示例中的`book`函数。在这个例子中,`COUNT`变量和`checkISBN`方法是私有的,只能在构造函数内部访问。`ctor`构造函数通过`this`关键字创建了公有方法,如`setId`、`...
JavaScript面向对象编程是指在JavaScript语言中使用面向对象的方法来编写程序。JavaScript是一种高级的、解释型的编程语言,它支持面向对象的编程范式,允许开发者创建对象、使用继承和多态等面向对象的特性。以下是...
JavaScript是一种广泛应用于Web开发的动态编程语言,尤其在构建交互式网页和富互联网应用...《JavaScript面向对象编程指南》这本书将帮助你进一步探索这个主题,通过实例和详细的解释,提升你的JavaScript编程技能。
总而言之,学习现代JavaScript面向对象编程,有助于开发者在认识这门语言演化的基础上,运用面向对象的设计和编程模式来构建更加健壮和可维护的JavaScript应用程序。同时,测试和调试是保证代码质量不可或缺的环节,...
### JavaScript面向对象编程知识点概述 #### 一、现代JavaScript编程概览 - **JavaScript的演进**:自诞生以来,JavaScript经历了从一个简单的脚本语言到现今被广泛应用于构建复杂应用的强大编程语言的过程。它的...
面向对象有封装、继承、多态性的特性,所以具有易维护、易复用、易扩展的特点。 类的调用需要实例化,开销较大,因此性能方面较面向过程低。 6.1.1 面向过程与面向对象 6.1 面向对象概述 主讲:重庆机电职业技术大学...
在深入讲解JavaScript面向对象与原型的知识点之前,首先需要了解JavaScript的基础知识。在JavaScript中,面向对象编程(OOP)的概念虽然存在,但是它的实现与传统基于类的语言有所不同。ECMAScript,也就是...
下面将详细探讨JavaScript面向对象编程的基本原理、特性以及实际应用。 1. **类与对象** - 在JavaScript中,对象是键值对的集合,可以通过字面量语法或构造函数创建。例如: ```javascript const person = { ...
在JavaScript面向对象编程中,随着Web2.0和Ajax技术的普及,JavaScript的角色从简单的表单验证扩展到了复杂的数据交互和页面动态更新。采用面向对象的编程风格可以使代码结构更加清晰,便于管理和维护。例如,...
本文旨在深入解析JavaScript面向对象编程的基础,包括对象的基本概念、类与对象的关系、对象的属性与方法、封装、继承与多态,以及JavaScript中对象的实现方式。 #### 对象的基本概念 面向对象编程的核心在于对...