`

JavaScript面向对象的编程

 
阅读更多

 关于JavaScript面向对象的编程以下是我的理解,有不对的地方请指出;

 

JavaScript是一种基于对象的语言,遇到的东西几乎都是对象,但又不是完整的面向对象的语言,因为他的语法中没有类(class) ,使用中我们可以吧属性和方法封装成一个对象,有时候也会从原型对象中生成一个实例对象。我们可以通过下面代码实现:

 

我们先把猫看作一个对象,它有两个属性 : 颜色和名字 

var  cat ={

    name :"",
    color: ""
}


我们可以根据这个原型对象生成两个实例对象 

     var cat1 = {}; // 创建一个空对象
     cat1.name = "大毛";       // 按照原型对象的属性赋值
     cat1.color = "黄色";
  var cat2 = {};
       cat2.name = "二毛";
     cat2.color = "黑色";



这就是简单的封装了,把两个属性封装在一个对象里面。但是,这样的写法有两个缺点,一是如果多生成几个实例,写起来就非常麻烦;二是实例与原型之间,没有任何办法,可以看出有什么联系。

 

 我们还可以用构造函数的模式,构造函数其实就是一个普通函数,但是在它内部使用了this变量,我们再用new对函数进行实例化,this变量也会绑定在实例对象上。

 

 

 

function Cat(name,color){
    this.name=name;
    this.color=color;
  }



我们可以用new运算符生成实例对象

var cat1 = new Cat("大毛","黄色");
  var cat2 = new Cat("二毛","黑色");
  alert(cat1.name); // 大毛
  alert(cat1.color); // 黄色
 

 

cat1和cat2 会自动含有constructor指向他们的构造函数

 

 

      
      alert(cat1.constructor == Cat); //true
  alert(cat2.constructor == Cat); //true
   

 

 

我们还可以为cat添加不变的属性,比如type或者添加一个eat()方法,在这我们用一种节省内存的方法 来做,将不变的属性和方法直接定义到prototype对象上。

 

 

function Cat(name,color){
    this.name = name;
    this.color = color;
  }
  Cat.prototype.type = "猫科动物";
  Cat.prototype.eat = function(){alert("吃老鼠")};

然后我们可以生成实例

var cat1 = new Cat("大毛","黄色");
  var cat2 = new Cat("二毛","黑色");
  alert(cat1.type); // 猫科动物
  cat1.eat(); // 吃老鼠
 

 

 

 

对于构造函数的继承我们说两种方法,一个是 prototype模式,一个是直接继承prototype对第一种的改进

 

有一个动物的构造函数
function Animal(){
    this.species = "动物";
  }
还有一个"猫"对象的构造函数。

  function Cat(name,color){
    this.name = name;
    this.color = color;
  }

 

 现在用第一种方法继承 

 

    Cat.prototype = new Animal();
  Cat.prototype.constructor = Cat;
  var cat1 = new Cat("大毛","黄色");
  alert(cat1.species); // 动物

 

 

Cat.prototype = new Animal();

 

代码的第一行,我们将Cat的prototype对象指向一个Animal的实例。

相当于完全删除了prototype 对象原先的值,然后赋予一个新值。

 

Cat.prototype.constructor = Cat;

  

第二行的意思是任何一个prototype对象都有一个constructor属性,指向它的构造函数。如果没有"Cat.prototype = new Animal();"这一行,Cat.prototype.constructor是指向Cat的;加了这一行以后,Cat.prototype.constructor指向Animal。

 

 验证一下

alert(Cat.prototype.constructor == Animal); //true

 

每一个实例也有一个constructor属性,默认调用prototype对象的constructor属性

 

alert(cat1.constructor == Cat.prototype.constructor); // true

 

因此,在运行"Cat.prototype = new Animal();"这一行之后,cat1.constructor也指向Animal!所以我们要注意使用第二行,改constructor的值 

 

还有一种就是 直接继承prototype,这是对上一种方法的改进,由于Animal对象中,不变的属性都可以直接写入Animal.prototype。所以,我们也可以让Cat()跳过 Animal(),直接继承Animal.prototype。

 

我们先将Animal对象改写

 

 function Animal(){ }
  Animal.prototype.species = "动物";

 

将Cat的prototype对象,然后指向Animal的prototype对象,这样就完成了继承。

 

 

    Cat.prototype = Animal.prototype;
  Cat.prototype.constructor = Cat;
  var cat1 = new Cat("大毛","黄色");
  alert(cat1.species); // 动物

 

但是我们要注意的是第二行实际上把Animal.prototype对象的constructor属性也改掉了

 

  alert(Animal.prototype.constructor); // Cat

 

 

 

分享到:
评论

相关推荐

    Javascript面向对象编程.

    在提供的资源中,《代码之美》PDF文件可能包含了关于编程实践和代码风格的指导,而《Javascript面向对象编程》PPT可能更具体地阐述了JavaScript OOP的细节和示例。学习这些材料将有助于深入理解JavaScript的面向对象...

    JavaScript面向对象编程指南.pdf

    JavaScript作为一门浏览器语言的核心思想;面向对象编程的基础知识及其在... 《JavaScript面向对象编程指南》着重介绍JavaScript在面向对象方面的特性,展示如何构建强健的、可维护的、功能强大的应用程序及程序库

    Javascript面向对象编程

    ### JavaScript面向对象编程详解 #### 一、引言 JavaScript作为一种广泛使用的脚本语言,在Web开发领域占据着举足轻重的地位。尽管JavaScript本质上是一种基于原型的语言,但它也支持面向对象编程的一些特性,使得...

    JavaScript面向对象编程指南

    《JavaScript面向对象编程指南》内容包括:JavaScript作为一门浏览器语言的核心思想;面向对象编程的基础知识及其在JavaScript中的运用;数据类型、操作符以及流程控制语句;函数、闭包、对象和原型等概念,以代码...

    JavaScript面向对象编程指南(第2版).rar

    JavaScript是一种广泛...通过深入学习这本《JavaScript面向对象编程指南(第2版)》,开发者不仅能掌握JavaScript的面向对象编程基础,还能了解到实际项目中如何有效地运用这些知识,提升编程技巧和解决问题的能力。

    javascript面向对象编程.pdf

    总而言之,学习现代JavaScript面向对象编程,有助于开发者在认识这门语言演化的基础上,运用面向对象的设计和编程模式来构建更加健壮和可维护的JavaScript应用程序。同时,测试和调试是保证代码质量不可或缺的环节,...

    JavaScript面向对象编程指南 pdf

    下面将详细探讨JavaScript面向对象编程的基本原理、特性以及实际应用。 1. **类与对象** - 在JavaScript中,对象是键值对的集合,可以通过字面量语法或构造函数创建。例如: ```javascript const person = { ...

    JavaScript面向对象编程指南完整版

    JavaScript面向对象编程指南是完整的扫描版...

    javascript面向对象编程指南 2nd

    javascript面向对象编程指南 2nd英文版,英文名:Object-Oriented JavaScript。 What you will learn from this book The basics of object-oriented programming, and how to apply it in the JavaScript ...

    JavaScript面向对象编程.pdf

    JavaScript面向对象编程.pdf

    JavaScript 面向对象编程

    ### JavaScript面向对象编程详解 #### 一、JavaScript面向对象编程简介 JavaScript作为一种广泛使用的脚本语言,虽然起源于一种简单的浏览器脚本环境,但随着时间的发展,它已经演变为一种功能强大的编程语言,...

    JavaScript面向对象编程指南完整扫描版

    JavaScript 面向对象 编程指南 完整扫描版

    JavaScript面向对象编程指南 完整版

    JavaScript面向对象编程指南完整版是扫描的....

    javascript面向对象编程

    资源名称:Javascript面向对象编程   内容简介: 从语言的视角来看,面向对象的程序设计和面向对象的Javascript 语言绝对不是什么摩登的  东西;Javascript 最开始就是被设计成一...

Global site tag (gtag.js) - Google Analytics