Javescript 面向对象编程 — 封装

  • 生成实例对象的原始模式
    <script type="text/javascript">
         var Cat={
             name:‘波斯猫‘,
             color:‘White‘
         }
         alert(cat.name);
     </script>

这是简单的封装,单若需要生成多个示例,则需要多生成多个示例,较为麻烦,如下:

<script type="text/javascript">
        var cat={
            name:‘波斯猫‘,
            color:‘White‘
        }
        var cat1={
            name:‘折耳猫‘,
            color:‘orange‘
        }
        var cat2={
            name:‘美国卷毛猫‘,
            color:‘White‘
        }
    </script>
  • 原始模式的改进

将生成实例的过程封装成一个方法,生成实例对象是,再调用方法,代码如下:

<script type="text/javascript">
        var cat3=NEWCat("折耳猫","orange");
        var cat4=NEWCat("波斯猫","White");
        function NEWCat(name,color)
        {
            var cat={
                name:name,
                color:color
            }
            return cat
        }
    </script>

这种方法存在的问题是两个实例之间没有存在内部联系,不能反应出它们是同一原型对象的实例

  • 构造函数模式

为了解决从原型对象生成实例的问题,Javascript提供了一个构造函数(Constructor)模式。

所谓"构造函数",其实就是一个普通函数,但是内部使用了this变量。对构造函数使用new运算符,就能生成实例,并且this变量会绑定在实例对象上。

this指的是调用函数的那个对象(后续学习总结this变量)

   <script type="text/javascript">
        var cat3= new Cat("折耳猫","orange");
        var cat4= new Cat("波斯猫","White");
        alert(cat3.name);
        alert(cat4.name);
        function  Cat(name,color)
        {
          this.name=name;
          this.color=color;
        }
    </script>

cat3和cat4会含有一个constructor属性,指向它们的构造函数:

alert(cat3.constructor == Cat); //true

alert(cat4.constructor == Cat); //true

Javascript还提供了一个instanceof运算符,验证原型对象与实例对象之间的关系:

alert(cat3 instanceof Cat); //true

alert(cat4 instanceof Cat); //true

但是,构造函数方法存在浪费内存的问题。

例如,若Cat对象内含有不变的属性type(种类),再添加一个方法eat(吃),

时间: 2024-10-09 01:51:09

Javescript 面向对象编程 — 封装的相关文章

Python面向对象编程-封装

1引言 你点击了桌面上的Chrome图标,一个浏览器窗口出现了,输入网址就可以在Internet世界愉快玩耍.这一切是怎么实现的呢?Chromium这个多进程的程序是如何启动各个进程的呢?浏览器主进程(界面进程)启动了哪些线程?如何启动的呢?这些问题一直萦绕在心头,一起来看看源代码吧.本文主要针对Chromium for Mac的源代码,其它操作系统大同小异. 2背景知识 浏览器作为一个应用程序,是以进程的形式运行在操作系统上的.首先,Chromium是一个多进程的应用程序,我们需要了解Chro

链接:面向对象编程-封装(构造函数)

Javascript 面向对象编程(一):封装 http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html

C#面向对象编程 封装 继承 多态

  C#面向对象编程 什么是面向对象? 面向对象编程是上个实际六十年代继面向结构编程之后提出的一个新的编程思想 封装,继承,多态 封装,继承,多态是面向对象编程的核心: 封装是实现面向对象程序设计的第一步,封装就是将数据或函数等集合在一个个的单元中(我们称之为类).被封装的对象通常被称为抽象数据类型 意义是:保护数据不被破坏(例如一台电视机我们能使用它但是不能随意改变内部的电路) 关键字:private,public,protected,internal Public string name;

python面向对象编程 -- 封装、继承(python3.5)

面向对象编程三要素:封装.继承和多态.本文主要看和封装.继承相关的概念:在python中多态的概念比较模糊,本文不做讨论. 1 封装 封装:将数据和操作组装到一起,对外只暴露一些接口供类外部或子类访问,隐藏数据和操作的实现细节. 在其他面向对象语言,比如java中,属性访问控制一般有三种状态:private.protectd.public.python中没有什么东西是完全不可见的,没有任何机制可以强制性的隐藏数据.所以在python中不存在真正的只能在对象内部访问的属性.一个被大多数的pytho

javascript面向对象编程---封装

javascript是一种基于对象(object-based)的语言,遇到的所有东西几乎都是对象,但js又不是一种真正面向对象编程语言,因为它的语法中没有class(类). 一.生成对象的原始模式 假设把猫看为一个对象,它有“名字”和“颜色”两个属性 var Cat={ name : ' ', color : ' ' } 根据这个原型对象的规格,生成两个实例对象. var cat1={}  //创建一个空对象 cat1.name = "大毛";    //按照原型对象的属性赋值 cat

Linux组件封装(三)使用面向对象编程封装Thread

C++11提供了thread,但是过于复杂,我们还是倾向于在项目中编写自己的Thread. Posix Thread的使用这里不再赘述. 重点是这个函数: #include <pthread.h> int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg); 第三个参数是一个回调函数,该函数必须返回值为void*,而且只有一个参数,类型

Javascript 面向对象编程(一):封装

学习Javascript,最难的地方是什么? 我觉得,Object(对象)最难.因为Javascript的Object模型很独特,和其他语言都不一样,初学者不容易掌握. 下面就是我的学习笔记,希望对大家学习这个部分有所帮助.我主要参考了以下两本书籍: <面向对象的Javascript>(Object-Oriented JavaScript) <Javascript高级程序设计(第二版)>(Professional JavaScript for Web Developers, 2nd

Javascript 面向对象编程初探(一)--- 封装

Javascript是一种基于对象(object-based)的语言,你遇到的所有东西几乎都是对象.但是,它又不是一种真正的面向对象编程(OOP)语言,因为它的语法中没有class(类). 那么,如果我们要把"属性"(property)和"方法"(method),封装成一个对象,甚至要从原型对象生成一个实例对象,我们应该怎么做呢? 一. 生成实例对象的原始模式 假定我们把猫看成一个对象,它有"名字"和"颜色"两个属性. var

【转】Javascript 面向对象编程(一):封装

原文链接:http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html Javascript 面向对象编程(一):封装 作者:阮一峰 Javascript是一种基于对象(object-based)的语言,你遇到的所有东西几乎都是对象.但是,它又不是一种真正的面向对象编程(OOP)语言,因为它的语法中没有class(类). 那么,如果我们要把"属性"(property)和"