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中,面向对象主要通过以下三种方式实现: 1. **构造函数(Constructor)**:构造函数是一种特殊的函数,用于创建和初始化对象。我们...
### JavaScript面向对象进阶知识点详解 #### 8.1 面向对象编程的基本特性 在探讨面向对象的JavaScript之前,我们首先需要了解面向对象编程(Object-Oriented Programming, OOP)的基本特性:封装性、抽象性、继承...
本书全面覆盖了面向对象编程的基础理论,并结合JavaScript的具体实现进行讲解。 - **第一章:JavaScript简介**:介绍JavaScript的发展历程、特点及其与Web浏览器的关系。 - **第二章:面向对象编程简介**:解释OOP...
如何实现JavaScript中缺失的面向对象特性,如对象的私有成员与私有方法;如何应用适当的编程模式,发挥JavaScript语言特有的优势;如何应用设计模式解决常见问题等。 《JavaScript面向对象编程指南》着重介绍...
如何实现JavaScript中缺失的面向对象特性,如对象的私有成员与私有方法;如何应用适当的编程模式,发挥JavaScript语言特有的优势;如何应用设计模式解决常见问题等。, 《JavaScript面向对象编程指南》着重介绍...
这份名为“JavaScript实现面向对象技术PPT 超牛 不看后悔”的资料,显然深入探讨了这一主题。 面向对象编程的核心概念包括类(Class)、对象(Object)、继承(Inheritance)、封装(Encapsulation)和多态...
JavaScript程序设计 ...6.1.2 面向对象的特征 6.1.2 面向对象的特征 1、面向对象的特征 面向对象具有三大特征: 封装性 继承性 多态性 6.1.2 面向对象的特征 特征一 封装性 封装:指的是隐藏内部的实现细节
在JavaScript中实现面向对象编程主要包括以下几个方面: - **类与对象**:JavaScript没有内置的类的概念,但在ES6中引入了`class`关键字来模拟类的行为。对象则是由类实例化出来的具体实体。 - **封装**:封装是指...
面向对象编程(OOP)作为一种重要的编程范式,在JavaScript中也有独特的实现方式。 #### 二、JavaScript的特性概述 JavaScript是一种基于原型的语言,这意味着它不像传统的面向对象语言(如Java或C++)那样拥有类的...
JavaScript作为一门浏览器语言的核心思想;...如何实现JavaScript中缺失的面向对象特性,如对象的私有成员与私有方法;如何应用适当的编程模式,发挥JavaScript语言特有的优势;如何应用设计模式解决常见问题等。
在JavaScript中,面向对象主要通过构造函数、原型链、原型对象和闭包等机制来实现。 1. **构造函数**:构造函数在JavaScript中扮演着类的角色,它们通常用来初始化新创建的对象。我们可以通过`new`关键字调用构造...
面向对象编程(Object-Oriented Programming,OOP)是JavaScript中的一个重要概念,它允许开发者通过对象来组织代码,提高可读性和可维护性。本指南的第二版深入探讨了JavaScript的面向对象特性,旨在帮助开发者更好...
总而言之,学习现代JavaScript面向对象编程,有助于开发者在认识这门语言演化的基础上,运用面向对象的设计和编程模式来构建更加健壮和可维护的JavaScript应用程序。同时,测试和调试是保证代码质量不可或缺的环节,...
传统方式对JavaScript的应用基本上是基于过程模型的,若在JavaScript中利用面向对象的思想进行代码编写,将会使得代码具有良好的结构和逻辑性,更便于管理和...本文让读者看到JavaScript如何实现面向对象编程并提供范例
总的来说,JavaScript的面向对象编程依赖于对象、原型和继承来实现类的功能。通过理解和熟练运用这些概念,开发者可以在JavaScript中构建复杂、可维护的系统,同时避免命名冲突问题。虽然JavaScript的面向对象模型与...
"javascript面向对象框架"这一主题涵盖了JavaScript中实现面向对象编程的框架,特别是Prototype和MooTools这两个优秀的库。 Prototype是JavaScript的一个开源库,它扩展了JavaScript的基本对象和函数,提供了强大的...
在JavaScript中,我们可以使用函数对象来实现面向对象的编程。函数对象可以作为值赋给变量、作为参数传递给另一个函数、或作为其它函数的返回值。 在JavaScript中,我们可以使用prototype链来实现继承。prototype链...