`

从Java的面向对象之后再学JavaScript的面向对象

阅读更多

一直都在用JavaScript完成一些客户端的功能,每次应用都是到网上现查现用,却从来没有系统的学习一下JavaScript。

有一次企图偷窥一下它的内涵,发现身边一个朋友正捧着一本JavaScript的书在看,忘记叫什么名字了,只记得比《thinking in java》还要厚,当时就放弃了偷窥的念头。

昨天在看关于AJAX的一本书时,正好很大的一部分篇幅是讲JavaScript的。读了读,感觉JavaScript真的好强大。同样是一种面向对象的语言,学习起来有很多和JAVA很相似的地方。

JavaScript中的"类"

在面向对象的思想中,最核心的概念之一就是类。 一个类表示了具有相似性质的一类事物的抽象,通过实例化一个类,可以获得属于该类的一个实例,即对象。

在JavaScript中,最常见的代码如下:

function funcName(){
  
// 具体内容
}


我们叫funcName为一个函数,其实funcName也可以理解成一个类,甚至也可以理解成一个对象。

认识function

我们都知道可以用function关键字定义一个函数,并为每一个函数指定一个函数名,通过函数名来进行调用。在JavaScript解释执行时,函数都是被维护为一个对象,这就是函数对象。

函数对象和其它用户自定义的对象有着本质的区别,它和日期对象(Date),数组对象(Array)等一样,都属于内部对象。这些对象的构造器是有JavaScript本身定义的:通过执行new Date()这样的语句返回一个对象。

函数对象对应的类型是function,同日期对象对应的类型是Date一样,可以通过new function()来创建一个函数对象,也可以通过function关键字来创建一个对象。如:

function func()
// 1.有名函数,函数名为func。
//
 2.函数名被调用才执行。
}

var func = new function()
// 1.无名函数,func只是一个变量对象指向了这个函数。
//
 2.先初始化函数,也就是执行一次,再把创建的函数对象赋给func。
}


prototype原型对象

prototype是一个对象。

prototype对象是实现面向对象的一个重要机制,所以特别记录一下。

由上面可以看出,每个函数其实也是一个对象,它们对应的类是“function”。这里,JavaScript同Java不同,就是,每一个函数对象都有一个子对象prototype。prototype对象表示该函数的原型,把函数理解成类,也就是说,prototype表示了一个类的组成。

当通过new来获取一个类的对象的时候,prototype对象的成员都会成为实例化对象的成员。如:

function student(){
}

student.prototype.name
="realsmy";
student.prototype.showBlog
=function(){
    alert(http:
//www.blogjava.net/realsmy);
}


类的实现

// 定义一个类student
function student(){
  
// 相当于构造函数
}

// 无类型对象的构造方法来指定prototype对象。
student.prototype = {
  
// 属性
  name:"realsmy";
  
// 方法
  showBlog:function(){
    alert(
this.name+" :http://www.blogjava.net/realsmy");
    
// 注意,类的成员之间互相引用,必须通过this指针来进行。
  }

}

这样更像传统意义面向对象语言中类的实现,只是构造函数和类的定义被分成了两个部分。

实现private,static

private:
前面的例子都属于共有成员,也就是说,向任何实例公开这些属性和方法。
JavaScript中没有特殊的机制来定义私有成员,但可以通过变量的作用域来实现。

function student(){
  
var id = "007";
  
this.myId = id;
  
this.showId() = function(){
    alert(id); 
// 可以访问id
    alert(this.myId); 
  }

}

var stu = new student();
// stu.id这个会被认作是未定义的
stu.myId = "008"// 有效赋值
stu.showId(); // 弹出"007"和"008"


static:

静态成员也是一个类的成员。
因为函数也是一个对象,所以可以用给函数对象直接添加成员的方法来实现静态成员。

function student(){
}

// 静态属性
student.school = "po da xue";
// 静态方法
student.out = function(){
  alert(
"jin tian ni tao ke le ma?");
}

这样每一个student对象都可以调用到那个属性和方法。
或者
function.prototype.show = function(){
  
// 
}


这样是给每个函数对象都添加通用的静态方法。

类的继承

利用反射机制和prototype实现继承
为了方便,可以先为每一个类添加一个共有的方法,用以实现继承。

function.prototype.inherit = function(baseClass){
  
// 反射机制
  for(var p in baseClass.prototype){
    
this.prototype[p] = baseClass.prototype[p];
  }

}

基类

function class1(){
  
// 
}

class1.prototype 
= {
  
// 
  method:function(){}
}

子类

function class2(){
  
// 
}

class2.inherit();
class2.prototype.method 
= function(){
  
// 覆盖父类中的method方法。
}


这样的方法是在牺牲了一定的代码可读性为代价的前提下,实现了类的继承。据说现在javascript的一种框架已经更好的实现了类的继承机制,还没有研究过。呵呵。

function是所有函数对象的基础,Object是所有对象(包括函数对象)的基础。

感觉,所有面向对象语言的设计思想都是一致的。简单说就是以对象为基础。JavaScript作为一种面向对象的语言,同样是以对象为基础的。

理解JavaScript面向对象的思想,对我以后学习JavaScript的一些高级技术会有很大帮助。

故,记录笔记于此。

分享到:
评论

相关推荐

    习题解答-Java面向对象程序设计-邢国波-清华大学出版社.pdf

    Java面向对象程序设计是计算机科学中的一个重要主题,尤其在Java编程中。邢国波的《Java面向对象程序设计》一书旨在帮助读者理解和掌握Java语言的核心特性,特别是面向对象编程的概念。以下是根据提供的内容和标签...

    Javascript 面向对象的JavaScript进阶

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

    猜拳游戏:java面向对象,kotlin面向对象,js面向对象,3个方法开发.zip.lnk

    猜拳游戏:java面向对象,kotlin面向对象,js面向对象,3个方法开发.zip.lnk猜拳游戏:java面向对象,kotlin面向对象,js面向对象,3个方法开发.zip.lnk猜拳游戏:java面向对象,kotlin面向对象,js面向对象,3个...

    JAVASCRIPT 面向对象编程精要

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

    javascript面向对象编程

    面向对象编程的基础知识及其在JavaScript中的运用;数据类型、操作符以及流程控制语句;函数、闭包、对象和原型等概念,以代码重用为目的的继承模式;BOM、DOM、浏览器事件、AJAX和JSON;如何实现JavaScript中缺失的...

    java 面向对象程序设计课件

    Java是一种广泛使用的面向对象编程语言,它以其平台独立性、高效性和丰富的类库而闻名。在"java 面向对象程序设计课件"中,我们可以深入探讨以下几个关键知识点: 1. **面向对象编程基础**:Java是面向对象的语言,...

    猜拳游戏:java面向对象,kotlin面向对象,js面向对象,3个方法开发.zip

    标题 "猜拳游戏:java面向对象,kotlin面向对象,js面向对象,3个方法开发.zip" 提供了关于一个编程项目的概览,这个项目采用了三种不同的编程语言——Java、Kotlin和JavaScript,来实现同一个猜拳游戏。面向对象...

    JavaScript面向对象编程指南.pdf

    JavaScript面向对象编程是指在JavaScript语言中使用面向对象的方法来编写程序。JavaScript是一种高级的、解释型的编程语言,它支持面向对象的编程范式,允许开发者创建对象、使用继承和多态等面向对象的特性。以下是...

    JAVA面向对象基础测试题-继承-封装-多态等测试题.docx

    根据给定文件的信息,我们可以总结出以下几个面向对象的基础知识点,并结合具体的题目来进行解析: ### 面向对象基础知识概述 面向对象编程(Object-Oriented ...这些知识点对于深入理解 Java 面向对象编程至关重要。

    JavaScript 面向对象编程详细讲解文档

    JavaScript是一种动态类型的脚本语言,虽然它不像Java或C#那样拥有传统的类和实例机制,但它的面向对象编程能力仍然非常强大。JavaScript的核心在于对象、原型和隐式继承,这些都是理解其面向对象特性的重要概念。 ...

    Javascript面向对象编程

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

    完成Java面向对象程序设计实验课的心得体会.doc

    "Java面向对象程序设计实验课的心得体会" 本文通过对 Java 面向对象程序设计实验课的学习和实践,探索了 Java 的重要性和面向对象编程思想的应用。作者通过实验课的学习,逐步熟悉了 Java 编程思想,掌握了基本技巧...

    Java面向对象的语言 面向对象软件开发 课件

    在"Java面向对象的语言 面向对象软件开发 课件"中,我们将深入探讨以下几个核心知识点: 1. **面向对象软件开发概述**:面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式,它基于“对象”的...

    JavaScript面向对象的支持

    JavaScript是一种广泛应用于Web开发的脚本语言,它虽然支持面向对象编程,但其面向对象的实现方式与其他传统面向对象语言(如Java或C++)有所不同。JavaScript中的面向对象特性主要体现在以下几个方面: 1. **基于...

    javascript 面向对象编程.pdf javascript 设计模式与开发实践.pdf

    JavaScript的面向对象特性并不像Java或C++那样是原生的,而是通过构造函数和原型链来实现的。构造函数用于创建具有特定属性和方法的对象,而原型链则让对象能够共享属性和方法,实现继承。此外,ES6引入了类的概念,...

    《Java面向对象程序设计》实训实验指导书.doc

    "Java面向对象程序设计实验指导书" 本实验指导书旨在指导学生学习Java面向对象程序设计的基本概念和技术。通过实验,学生将学习如何安装和配置Java开发环境,熟悉Java语言的基本语法和面向对象编程概念,并掌握图形...

    JavaScript面向对象程序设计

    在JavaScript面向对象编程中,随着Web2.0和Ajax技术的普及,JavaScript的角色从简单的表单验证扩展到了复杂的数据交互和页面动态更新。采用面向对象的编程风格可以使代码结构更加清晰,便于管理和维护。例如,...

    java面向对象

    Java面向对象是Java编程语言的核心特性,它基于面向对象编程(OOP)理念,使得...总之,这些文档覆盖了Java面向对象编程的广泛领域,从基础到高级,从理论到实践,有助于全面理解和掌握Java的面向对象编程思想和技巧。

    猎头java技术型。熟练掌握JAVA面向对象编程语言

    熟练掌握JAVA面向对象编程语言,有良好的编码习惯 熟悉常用的JavaAPI,包括多线程、IO、Socket、JDBC、XML、反射等 熟练使用HTML、CSS、JavaScript、JQuery,并了解Ajax 熟练使用JSP、Servlet、javaBean进行web应用...

Global site tag (gtag.js) - Google Analytics