`
ah_fu
  • 浏览: 227868 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

JavaScript如何实现“面向对象”的各种特征

阅读更多

JavaScript如何实现“面向对象”的各种特征

JavaScript是一种基于对象的语言,只能使用系统提供的内置对象。如何才能用JavaScript写出象面向对象语言一样的代码呢?下面我就给大家说说我的方法。

1、定义一个类(class & field)
//***********code begin***********
//定义类
function MyClass()
{
 this.field1;  //定义类的成员
 this.field2;
}
var obj = new MyClass();  //调用类
obj.aa = 1;  //访问成员
obj = null;  //释放对象
//***********code end***********

2、定义类的方法(method)
//***********code begin***********
function MyClass()
{
 this.method1 = _func1;
 this.method2 = _func2;

 //函数
 function _func1(aa)
 {
  //code here
 }
}
function _func2(aa,bb)  //外部函数
{
 //code here
}
var obj = new MyClass();  //调用类
obj.method1("参数");  //调用方法
obj = null;  //释放对象
//***********code end***********
注意:a.把一个函数绑定到方法的时候,不能加参数和括号;
      b.绑定为方法的函数可以在类的外部或内部(当然,在别的文件中也行)

3、属性(Property)
   抱歉,JavaScript不能实现象C#中的属性那样的效果,定义的方法和数据成员都是公有的。
但是,我们可以用方法来访问属性。
//***********code begin***********
function MyClass()
{
 var privateData = 0;
 this.getData = _func1;
 this.setData = _func2;

 //获取成员
 function _func1()
 {
  return privateData;
 }

 //设置成员
 function _func2(value)
 {
  privateData = value;
 }
}
var obj = new MyClass();  //调用类
obj.setData(100);
alert(obj.getData());
obj = null;  //释放对象
//***********code end***********
注意:a.这里其实是定义一个函数内的局部变量,外部无法访问,所以,访问成员的方法也要定义在类里面。

4、数据成员(public & private)
   JavaScript中定义的类中,成员都是可以访问的,就好像默认加上了public。
   如何实现成员的私有呢?看了3的例子可能就明白了,在class里面定义局部变量就能够使成员私有。
   方法的私有也是一样,只要函数不绑定就行了。
//***********code begin***********
function MyClass()
{
 var privateData = 0;
 this.getData = _func1;
 this.setData = _func2;

 //获取成员
 function _func1()
 {
  return privateData;
 }

 //设置成员
 function _func2(value)
 {
  __privateMethod();  //访问私有的方法,外部不能访问
  privateData = value;
 }

 function __privateMethod()
 {
  privateData = 1000;  //私有方法中访问私有成员
 }
}
var obj = new MyClass();  //调用类
obj.setData(100);
obj.getData();
obj = null;  //释放对象
//***********code end***********
注意:a.公有方法中能够访问公有的方法和成员,也能访问私有的方法和成员;但是,私有的方法只能访问私有的方法和成员。

5、对对象本身的访问(this)
   看了上面一节,朋友们一定发现这样的问题:私有的方法中如何访问对象本身?
   如果一个函数,没有采用this.方法名=函数名的格式绑定,那么函数中使用this将产生错误。如何解决呢?
//***********code begin***********
function MyClass()
{
 var me = this;  //注意这里,将对象本身引用到另外一个对象。
 var privateData = 0;
 this.publicData;
 this.getData = _func1;
 this.setData = _func2;

 //获取成员
 function _func1()
 {
  return privateData;
 }

 //设置成员
 function _func2(value)
 {
  this.publicData = 100;  //访问共有的数据成员
  __privateMethod();  //访问私有的方法,外部不能访问
  privateData = value;
 }

 function __privateMethod()
 {
  me.publicData = 200;  //在私有方法中访问共有方法
  privateData = 1000;  //私有方法中访问私有成员
 }
}
var obj = new MyClass();  //调用类
obj.setData(100);
obj.getData();
obj = null;  //释放对象
//***********code end***********
总结:在定义类的时候,将对象本身赋值给一个局部变量,其他函数就能通过访问这个变量来访问类了。

6、函数重载(overload)
   函数重载能够通过不同的参数,调用同名的不同函数。JavaScript中也可以,只是要麻烦些:
//***********code begin***********
function func1()  //在定义函数的时候可以指定,也可以不指定参数
{
 var nArgCount = func1.arguments.length;
 switch(nArgCount)
 {
  case 0:  //没有参数
   //code here
   break;
  case 1:  //一个参数
   //code here
   break;
  …………
  default:
   //code here
   break;
 }
}
//***********code end***********
注意:a.可惜,我还没有想出如何根据参数类型而作出判断的方法。

7、构造函数(Constrcutor)
   呵呵,因为类本身就是一个函数,所以把代码直接写在函数里面就相当于构造函数了。
//***********code begin***********
function MyClass()
{
 this.publicData;
 //下面的代码相当于构造函数
 this.publicData = 123;
 alert(this.publicData);
}
var obj = new MyClass();  //调用类
obj = null;  //释放对象
//***********code end***********
注意:构造函数在这里没有使用参数,可以结合第6个技巧,做出构造函数参数的效果。

8、自定义事件(event)
   JavaScript中,函数本身也是对象,可以直接使用,所以,定义自己的事件也很简单。
//***********code begin***********
function MyClass()
{
 var privateData = 0;
 this.setData = _setData;
 this.OnDataChange = null;

 function _setData(value)
 {
  privateData = value;
  this.OnDataChange();  //引发事件
 }
}
function MyEvent()
{
 alert("你改变了数值!");
}
var obj = new MyClass();  //调用类
obj.OnDataChange = MyEvent;
obj.setData(1234);
obj = null;  //释放对象
//***********code end***********

9、继承
  使用prototype实现继承:
function MyClass()
{
    this.Property = "value";
    this.Method = function(){}
}

var obj = new MyClass();
obj.prototype.Property1 = "value1";
obj.prototype.Method1 = function(){}

   好了,以上就是小弟总结出来的技巧,希望对大家有所帮助。
   同时,我再次也倡议大家:如果多个函数能够重用,或者解决某个问题能够重用,那么就把这些JavaScript的代码写成一个类。封装性好,重用性也好!


*********************************
* 阿福原创                      *
* QQ:12304685                   *
* mail:ah_fu126@hotmail.com     *
*********************************

分享到:
评论

相关推荐

    Javascript面向对象编程.

    这篇博客文章可能详细讨论了如何在JavaScript中实现面向对象编程。 在JavaScript中,面向对象主要通过以下三种方式实现: 1. **构造函数(Constructor)**:构造函数是一种特殊的函数,用于创建和初始化对象。我们...

    Javascript 面向对象的JavaScript进阶

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

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

    本书全面覆盖了面向对象编程的基础理论,并结合JavaScript的具体实现进行讲解。 - **第一章:JavaScript简介**:介绍JavaScript的发展历程、特点及其与Web浏览器的关系。 - **第二章:面向对象编程简介**:解释OOP...

    JavaScript面向对象编程指南.pdf

    如何实现JavaScript中缺失的面向对象特性,如对象的私有成员与私有方法;如何应用适当的编程模式,发挥JavaScript语言特有的优势;如何应用设计模式解决常见问题等。 《JavaScript面向对象编程指南》着重介绍...

    JavaScript面向对象编程指南

    如何实现JavaScript中缺失的面向对象特性,如对象的私有成员与私有方法;如何应用适当的编程模式,发挥JavaScript语言特有的优势;如何应用设计模式解决常见问题等。, 《JavaScript面向对象编程指南》着重介绍...

    Javascript实现面向对象技术PPT 超牛 不看后悔

    这份名为“JavaScript实现面向对象技术PPT 超牛 不看后悔”的资料,显然深入探讨了这一主题。 面向对象编程的核心概念包括类(Class)、对象(Object)、继承(Inheritance)、封装(Encapsulation)和多态...

    JavaScript程序设计课件:面向对象概述.pptx

    JavaScript程序设计 ...6.1.2 面向对象的特征 6.1.2 面向对象的特征 1、面向对象的特征 面向对象具有三大特征: 封装性 继承性 多态性 6.1.2 面向对象的特征 特征一 封装性 封装:指的是隐藏内部的实现细节

    javascript 经典面向对象设计

    在JavaScript中实现面向对象编程主要包括以下几个方面: - **类与对象**:JavaScript没有内置的类的概念,但在ES6中引入了`class`关键字来模拟类的行为。对象则是由类实例化出来的具体实体。 - **封装**:封装是指...

    JAVASCRIPT 面向对象编程精要

    面向对象编程(OOP)作为一种重要的编程范式,在JavaScript中也有独特的实现方式。 #### 二、JavaScript的特性概述 JavaScript是一种基于原型的语言,这意味着它不像传统的面向对象语言(如Java或C++)那样拥有类的...

    javascript面向对象编程

    JavaScript作为一门浏览器语言的核心思想;...如何实现JavaScript中缺失的面向对象特性,如对象的私有成员与私有方法;如何应用适当的编程模式,发挥JavaScript语言特有的优势;如何应用设计模式解决常见问题等。

    面向对象JavaScript开发

    在JavaScript中,面向对象主要通过构造函数、原型链、原型对象和闭包等机制来实现。 1. **构造函数**:构造函数在JavaScript中扮演着类的角色,它们通常用来初始化新创建的对象。我们可以通过`new`关键字调用构造...

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

    面向对象编程(Object-Oriented Programming,OOP)是JavaScript中的一个重要概念,它允许开发者通过对象来组织代码,提高可读性和可维护性。本指南的第二版深入探讨了JavaScript的面向对象特性,旨在帮助开发者更好...

    javascript面向对象编程.pdf

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

    JavaScript的面向对象特性浅析与范例

    传统方式对JavaScript的应用基本上是基于过程模型的,若在JavaScript中利用面向对象的思想进行代码编写,将会使得代码具有良好的结构和逻辑性,更便于管理和...本文让读者看到JavaScript如何实现面向对象编程并提供范例

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

    总的来说,JavaScript的面向对象编程依赖于对象、原型和继承来实现类的功能。通过理解和熟练运用这些概念,开发者可以在JavaScript中构建复杂、可维护的系统,同时避免命名冲突问题。虽然JavaScript的面向对象模型与...

    javascript面向对象框架

    "javascript面向对象框架"这一主题涵盖了JavaScript中实现面向对象编程的框架,特别是Prototype和MooTools这两个优秀的库。 Prototype是JavaScript的一个开源库,它扩展了JavaScript的基本对象和函数,提供了强大的...

    面向对象javascript

    在JavaScript中,我们可以使用函数对象来实现面向对象的编程。函数对象可以作为值赋给变量、作为参数传递给另一个函数、或作为其它函数的返回值。 在JavaScript中,我们可以使用prototype链来实现继承。prototype链...

Global site tag (gtag.js) - Google Analytics