javascript继承(八)-封装

这个系列主要探讨的是javascript面向对象的编程,前面已经着重介绍了一下js的继承,下面想简单的说一下js如何实现封装的特性。

我们知道面向对象的语言实现封装是把成员变量和方法用一个类包围起来,对类中变量的访问只能通过已定义的接口。封装可以算是一种信息隐藏技术,java通过private修饰符将成员变量私有化,并提供对外修改的接口,以控制类中的成员变量的访问和修改。当然在这些方法中可以对数据进行一些加工。

在前面文章已经介绍了js的属性问题,那么在js中如何实现对类的属性隐藏呢?这里封装有会有什么蔽端。

下面看一下实现封装的代码:

var Person = (function(){
    //定义私有方法,相当于private方法,只能在内部访问
    function hello(){
        alert(‘hello world!‘);
    }
    return function(){
        //定义私有属性,相当于private属性,只能在公有方法内部访问
        var name,age;
        //定义公有方法,相当于public方法,可以在类的实例中方法
        this.getName = function(){
            return name;
        };
        this.setName = function(newName){
            name = newName;
        };
        this.getAge = function(){
            return age;
        }
        this.setAge = function(newAge){
            age = newAge;
        };
        this.say = hello;
        this.introduce = function(){
            alert(‘my name is :‘+this.getName());
        }
    }
})()

var p = new Person();
p.say(); //hello world
p.setName(‘xiaoming‘);
p.introduce(); //my name is : xiaoming

封装的好处这儿就不用多说了,但在js里使用一定得注意,避免过度封装。下面看一下封装对继承有没有什么影响。

代码如下:

var Person = (function(){
    //定义私有方法
    function hello(){
        alert(‘hello world!‘);
    }
    return function(){
        //定义私有属性,相当于private属性
        var name,age;
        //定义公有方法,相当于public方法
        this.getName = function(){
            return name;
        };
        this.setName = function(newName){
            name = newName;
        };
        this.getAge = function(){
            return age;
        }
        this.setAge = function(newAge){
            age = newAge;
        };
        this.say = hello;
        this.introduce = function(){
            alert(‘my name is :‘+this.getName());
        }
    }
})()

Person.prototype.call = function(){
    this.say();
}

var Student = function(){
    Person.call(this);
}
for(var i in Person.prototype){Student.prototype[i] = Person.prototype[i]}

var s = new Student();
s.setName(‘xiaoli‘);
s.getName();//xiaoli
s.call();//helloworld

可以看到Student类继承了Person类,获得了Person类的公有方法和共有方法即prototype定义的方法。由于JavaScript并不原生支持封装,所以在JavaScript中实现封装一定要注意复杂性的问题。

javascript继承(八)-封装

时间: 2024-10-29 20:01:22

javascript继承(八)-封装的相关文章

如何在Javascript中利用封装这个特性

对于熟悉C#和Java的兄弟们,面向对象的三大思想(封装,继承,多态)肯定是了解的,那么如何在Javascript中利用封装这个特性呢? 我们会把现实中的一些事物抽象成一个Class并且把事物的属性(名词)作为Class的Property把事物的动作(动词)作为Class的methods.在面向对象的语言中(C#等)都会有一些关键字来修饰类或者属性(Private,public,protect),这些关键词描述了访问的权限,不多做解释.泗阳县民用航空局 我们来看看Javascript的易变的特性

重温Javascript继承机制

原文:http://mozilla.com.cn/post/21667/ =========================== 上段时间,团队内部有过好几次给力的分享,这里对西风师傅分享的继承机制稍作整理一下,适当加了些口语化的描述,留作备案. 一.讲个故事吧 澄清在先,Java和Javascript是雷锋和雷峰塔的关系.Javascript原名Mocha,当时还叫做LiveScript,创造者是Brendan Eich,现任Mozilla公司首席技术官. 1994年,历史上第一个比较成熟的网

【JavaScript】重温Javascript继承机制

上段时间,团队内部有过好几次给力的分享,这里对西风师傅分享的继承机制稍作整理一下,适当加了些口语化的描述,留作备案. 一.讲个故事吧 澄清在先,Java和Javascript是雷锋和雷峰塔的关系.Javascript原名Mocha,当时还叫做LiveScript,创造者是Brendan Eich,现任Mozilla公司首席技术官. 1994年,历史上第一个比较成熟的网络浏览器——Navigator0.9版诞生在网景公司(Netscape),极为轰动.但是,Navigator0.9只能用来浏览,不

javascript继承—继承的实现原理(1)

打算针对js的继承写一系列文章,详细的分析js里继承原理,实现方式,各种继承方式的优缺点,以及最优继承方案,还有多继承的问题等-. 面向对象的编程的核心是封装.继承和多态,js可以看作是一种面向对象的语言,而面向对象的扩展性最核心的部分是多态,多态的必要条件有三个,首先就是继承,其次父类的引用指向子类,最后是方法重写.对于js来说,由于其创建对象的方式多种多样,因此,需要对父类的多种属性和方法实现很好的继承,就必须找到一个比较完善的方法.本篇文章首选介绍三种最基本的继承方式,并分析这几种继承方式

Javascript继承机制的实现

学完了Javascript类和对象的创建之后,现在总结一下Javascript继承机制的实现.Javascript并不像Java那样对继承机制有严格明确的定义,它的实现方式正如它的变量的使用方式那样也是十分宽松的,你可以设计自己的方法"模仿"继承机制的实现.有以下几种方法: 1.对象冒充 1 <script type="text/javascript"> 2 function classA(str){ 3 this.str=str; 4 this.pri

javascript继承(七)—用继承的方式实现照片墙功能

照片墙DEMO下载 注意:图片有四种类型:1可放大:2可拖动:3即可放大也可拖动:4都不行.由于每个图片的构造函数不同而不同 照片墙的实现是比较容易的,网上也有许许多多的事例.本篇文章将着重介绍一下用继承的方式怎么样去实现.使用继承又能带来怎样的好处.我们知道面向对象的优势在于可扩展性,这篇文章主要就是用面向对象的思想. 下面将具体的介绍如何实现照片墙: 首先是布局,将所有照片按顺序排列并不难,因为图片的宽高是不固定的,所以这儿只需要定义图片的高就行了,宽度会根据高度来缩放.又因为要实现拖动的效

javascript继承笔记----1024

惊涛随笔 javascript继承笔记 //原型(prototype):原型是一个对象,其他对象可以通过它实现属性继承 /*笔记:* 1.类式继承:通过原型链继承的方式 * 2.原型式继承:对类式继承的封装 * 3.寄生式继承:对原型继承的二次封装,并且在第二次封装过程中对继承的对象进行扩展 * 4.构造函数式继承:通过构造函数继承的方式 * 5.组合式继承(类式继承+构造函数式继承 两者优点相加过滤缺点) * 6.寄生组合式继承:寄生式继承融合构造函数式继承的优点去除缺点的方式*/ //原型式

javascript继承笔记

//原型(prototype):原型是一个对象,其他对象可以通过它实现属性继承 /*笔记: * 1.类式继承:通过原型链继承的方式 * 2.原型式继承:对类式继承的封装 * 3.寄生式继承:对原型继承的二次封装,并且在第二次封装过程中对继承的对象进行扩展 * 4.构造函数式继承:通过构造函数继承的方式 * 5.寄生组合式继承:寄生式继承融合构造函数式继承的优点去除缺点的方式 * 6.组合式继承(类式继承+构造函数式继承 两者优点相加) */ //原型式继承 function inheritobj

JavaScript继承详解(一)

面向对象与基于对象 几乎每个开发人员都有面向对象语言(比如C++.C#.Java)的开发经验. 在传统面向对象的语言中,有两个非常重要的概念 - 类和实例. 类定义了一类事物公共的行为和方法:而实例则是类的一个具体实现. 我们还知道,面向对象编程有三个重要的概念 - 封装.继承和多态. 但是在JavaScript的世界中,所有的这一切特性似乎都不存在. 因为JavaScript本身不是面向对象的语言,而是基于对象的语言. 这里面就有一些有趣的特性,比如JavaScript中所有事物都是对象, 包