JavaScript OOP(1)面向对象基础


这个是我的《Ajax完全自学手册》一书第5章节选部分,还会有后续章节,陆续贴出

  5.1 JavaScript中的对象

  编程语言发展至今,基本上都是面向对象的语言。面向对象的语言十分优雅、便于学习和掌握、可以多次重用。在JavaScript中,大量使用内置对象。实际上,开发者可以利用JavaScript面向对象的特征,定义类、对象,从而进行面向对象开发。

  5.1.1 什么是对象

  在JavaScript中,没有明确的对类、对象等概念定义,但是JavaScript用其自己的方式实现了这些概念。

  一般面向对象的语言里,对象被认为是通过类的构造函数进行实例化的,即类的实例。所有的对象都是由类进行定义的,具有类中定义各种属性和方法的实例。在JavaScript中,这些特征都得以实现。并且在JavaScript中,构造函数依然可以自定义,并且可以进行重载。

  在JavaScript中的对象被认为是特性的集合。特性可以是函数、也可以是普通的成员变量或其他类的引用。如果特性是1个函数,那么该函数被认为是当前对象的方法,普通的成员变量被认为是对象的属性。

  5.1.2 声明及实例化对象

  JavaScript中,声明对象的可以通过var关键字进行。示例代码如下:

var obj;

  JavaScript与其他面向对象的语言一样,也定义了new关键字作为实例化对象的操作符。实例化1个对象可以通过以下的代码实现:

var obj1=new Object();

  在JavaScript中,对象的类型由实例化的类型决定。

  5.1.3 对象的引用及销毁

  在JavaScript中,变量可以存储原始值和引用值。原始值被认为存储在栈中,拥有固定大小,可以直接操纵。引用值被认为存储在堆中,引用值仅仅是内存指针即实际对象的引用。

  实际上在JavaScript中,有5种类型的对象被认为是以原始值存储的。undefined、boolean、number、string、object5个类的对象大小固定,使用栈分配内存,故而被认为是原始值。在这里要特别指出的是null,null被认为是指向空object对象的引用。当运行以下代码时,结果为object。

function createObject()

{

var obj=null;

alert(typeof(obj));

}

  当调用以上代码时,读者会看到提示框显示object字样。还要特别指出的是undefined,undefined类型只有1个值即undefined。当对象未实例化时或函数没有明确的返回值时,就被认为是undefined。示例代码如下:

function createObject()

{

var obj;

alert(typeof(obj));

}

function doNothing()

{

}

var doSomething=doNothing();

alert(typeof(doSomething));

  在JavaScript中支持typeof()运算符,可以动态分析对象的类型。在上例中,读者一定已经看到了typeof()的使用。

  JavaScript遵循ECMAScript标准,ECMAScript标准规定所有浏览器都必须支持无用存储单元收集程序。当1个对象没有任何引用时,会被无用存储单元收集程序销毁。所有局部变量在超出作用域或生命周期完结时,也会被无用存储单元收集程序销毁。

  在JavaScript中,可以将对象引用设为null,从而进行对象销毁。

  5.1.4 绑定机制

  绑定机制是语言实现的关键,绑定机制是指将对象类型与对象实例紧密结合,通知编译器当前对象具有什么方法和属性。

  绑定机制有两种,早期绑定和晚期绑定。

  q 早期绑定:早期绑定是开发者最熟悉和使用最多的一种绑定方式。早期绑定具有这样的特点:对象声明时,对象的属性和方法就被编译成为对象的一部分、对象的类型一旦确定就不能进行随意的更改、对象类型的变换必须遵循特定的规则。在Java、C#、VB.NET这样的强类型语言中,都采用了早期绑定的方式。

  晚期绑定:在一些弱类型的语言中,晚期绑定被大量使用。晚期绑定具有这样的特点:对象声明时,对象的属性和方法并没有编译为对象的一部分,而是在运行期动态检查对象是否具有相应的属性和方法。在JavaScript等弱类型的语言中,都采用了晚期绑定的方式。晚期绑定导致这些弱类型语言不能进行实时报错


« 
» 
快速导航

Copyright © 2016 phpStudy | 豫ICP备2021030365号-3