`

JavaScript中的面向对象

阅读更多

 

JavaScript是一种基于对象的语言。由于不存在class(类)的概念,所以不是真正的面向对象语言。
本文是对JavaScript中实现封装、继承等面向对象特性学习的笔记。
一、类
function SimpleDemo(param1, param2){
     this.param1 = param1;
     this.param2 = param2;
}
这是JavaScript中类的定义,与普通function不同的是,"类"以大写开头,实则是一个构造函数。
使用这个类需要使用关键字“new”
eg:
var demo = new SimpleDemo('p1', 'p2');
alert( '类的属性:1.' + demo.param1 + ',2.' + demo.param2 );
JavaScript的类中定义方法有多种方法。
1.直接在已创建的对象中定义:
demo.toString = function(){
     return 'param1:' + this.param1 + ',param2:' + this.param2;
}
缺点:只有在该对象中使用,对于其他通过new SimpleDemo()来创建的对象均不能使用该方法。
改进:
2.直接在类中定义:
function SimpleDemo(param1, param2){
     this.param1 = this.param1;
     this.param2 = this.param2;
     this.toString = function(){          //注意定义的方法有返回值的话,toString后不能加"()",加了就不能有返回值。
          return '参数1:' + this.param1 + ',参数2:' + this.param2;
     }
}
可直接调用:alert(new SimpleDemo('apple', 'orange').toString());
同理,可以通过这种方式定义多个方法。
缺点:类中若定义多个方法,则每次产生一个对象的时候都会将所有代码复制一遍,显然不是最优雅的解决办法。
改进:
3.使用函数的prototype对象
关于prototype对象:所有函数都包含一个prototype的属性,这个属性指向一个prototype对象。
//关于prototype对象的详细描述敬请期待
function SimpleDemo(param1, param2){
     this.param1 = param1;
     this.param2 = param2;
}
SimpleDemo.prototype.toString = function(){
     return '参数1:' + this.param1 + ', 参数2:' + this.param2;
}
window.onload = function(){
    alert(new SimpleDemo('apple', 'orange').toString());
}
 或同时定义多个方法:
SimpleDemo.prototype = {
     toString : function(){
          return '参数1:' + this.param1 + ',参数2:' + this.param2;
     },
     sayHello : function(){
          return 'Hello World!!';
     }
}
  
二、静态类
var sDemo = function(){};
sDemo.name = 'static class';
sDemo.discription = 'This is a static class demo';
sDemo.distance = 0;
sDemo.forward = function(){
     this.distance++;
}
sDemo.forward = function(){
    this.distance--;
}
window.onload = function(){
          alert(sDemo.distance);      //结果为["0"]
          sDemo.forward();
          sDemo.forward();
          sDemo.backward();
          alert(sDemo.distance);      //结果为["2"]
}
 因为是静态类,所以没有必要使用prototype对象。用了也会报错。
 
三、继承
使用apply方法来继承父类成员,使用for/in循环来继承父类prototype对象的方法。
function People(){
          this.type = 'human';
}
People.prototype = {
          getType : function(){
                    return 'this is a mankind';
          },
          getActions : function(){
                    return 'talk/walk/hear/smell.etc';
          }
}

function Student(name, sex, age){
          People.apply(this, arguments);
          for(var index in People.prototype){          //JavaScript中的for循环使用用来遍历数组,此处为for/in循环,用来遍历对象的属性成员
                    var proto = this.constructor.prototype;
                    if(!proto[index]){     //当前类的prototype继承父类的prototype
                              proto[index] = People.prototype[index];
                    }
                    proto[index]['super'] = People.prototype;      //???
          }
          this.name = name;
          this.sex = sex;
          this.age = age;
}

window.onload = function(){
          var s1 = new Student('Hungry', 'male', 14);
          alert(s1.getType());      //结果为["this is a mankind"]
          alert(s1.getActions());
}
 

 参考资料:

1.HTML5 Canvas 游戏开发实战, by 张路斌, 机械出版社, 2013年4月

2.JavaScript:The Definitive Guide, by David Flanagan(O'Reilly).

分享到:
评论

相关推荐

    Javascript面向对象编程.

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

    Javascript 面向对象的JavaScript进阶

    ### JavaScript面向对象进阶知识点详解 #### 8.1 面向对象编程的基本特性 在探讨面向对象的JavaScript之前,我们首先需要了解面向对象编程(Object-Oriented Programming, OOP)的基本特性:封装性、抽象性、继承...

    面向对象JavaScript精要(英文原版pdf)

    作者深入浅出地介绍了面向对象编程的基本原理以及如何将这些原理应用于JavaScript中。 #### 二、面向对象编程基础 面向对象编程(OOP)是一种软件开发方法,它通过将数据和处理这些数据的方法捆绑在一起形成“对象”...

    javascript面向对象编程

    通过这种方式,JavaScript面向对象编程不仅包括了代码的实际编写,还包括了测试和调试的环节,确保代码的质量和可维护性。学习和掌握面向对象编程的方法是学习JavaScript的重要一环,对于任何想要深入学习并掌握...

    JavaScript面向对象编程指南.pdf

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

    JavaScript面向对象编程指南

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

    面向对象的JavaScript.docx

    本文主要讲述了面向对象编程的基本概念和JavaScript中面向对象编程的实现方法。 一、面向对象编程的基本概念 面向对象编程是一种编程范式,它支持基本特性:继承、封装、多态。面向对象编程使我们更好地用程序代码...

    javascript 经典面向对象设计

    2. **JavaScript中的面向对象编程** - JavaScript与传统面向对象语言的区别 - 原型链 - 构造函数 - 类与继承 - 静态属性与方法 3. **设计模式** - 单例模式 - 工厂模式 - 抽象工厂模式 - 建造者模式 - ...

    JAVASCRIPT 面向对象编程精要

    ### JavaScript面向对象编程精要 #### 一、引言 JavaScript是一种灵活且强大的脚本语言,它虽然起源于一种简单的浏览器脚本语言,但随着时间的发展,JavaScript已经成为了一种功能全面的编程语言,尤其是在Web开发...

    面向对象JavaScript开发

    当尝试访问对象的一个属性时,JavaScript会首先在当前对象中查找,如果找不到,就会沿着原型链向上查找,直到找到为止。 4. **继承**:JavaScript支持多种继承方式,如原型链继承、构造函数继承、组合继承、原型式...

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

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

    javascript面向对象编程(中文).pdf

    ### JavaScript面向对象编程知识点概述 #### 一、现代JavaScript编程概览 - **JavaScript的演进**:自诞生以来,JavaScript经历了从一个简单的脚本语言到现今被广泛应用于构建复杂应用的强大编程语言的过程。它的...

    韩顺平 javascript 笔记 js面向对象 笔记 韩顺平 完整版

    总的来说,韩顺平的JavaScript面向对象笔记详细地介绍了JavaScript中面向对象编程的关键概念和技术,包括变量作用域、对象引用、this的使用、对象的方法以及对象的构造和继承,这些都是理解和编写高效JavaScript代码...

    javascript 面向对象程序设计博客文章

    在JavaScript中,虽然没有传统的类,但它提供了基于原型的面向对象模型,使得开发者可以利用这些特性来构建复杂的应用。 1. **构造函数与实例化** JavaScript中的构造函数类似于其他面向对象语言中的类,用于创建...

Global site tag (gtag.js) - Google Analytics