JavaScript 构造函数 面相对象学习必备知识

 更新时间:2010年06月09日 01:11:25   作者:  
关于JavaScript构造函数,如今出现了很多JavaScript的框架,例如jQuery、Ext等等这些,这些将JavaScript作为一种面向对象的语言进行编程,那么JavaScript到底是怎么样实现面向对象的一些特征的呢,首先,我们来看看JavaScript怎么样来定义一个构造函数。
复制代码 代码如下:

function A(x)
{
this.x = x;
}
var obj = new A(5);
alert(obj.x);

这段代码十分简单,但是我们重要的是看到了一个十分惊讶的结果,obj被我们赋予了一个属性x,就如同我们在C#中使用某个类的实例的时候一样。那么这个属性是怎么样产生的呢?

关键语句:this.x=x。这句话就是进行一个属性的申明与赋值,这里,我们肯定会问到,this是什么?为什么可以使用this.x来进行申明与赋值属性呢?

其实this代表的就是我们刚刚实例化出来的obj,就相当于我们使用obj去调用了构造函数A里面的属性、方法等等。

那么,我们怎么样去在构造函数中定义一个方法呢?

复制代码 代码如下:

function A(x,y)
{
this.x = x;
this.y = y;
A.prototype.FunX = function(){alert(x)};
A.prototype.FunY = function(){alert(y)};
}
var obj = new A(5,10);
alert(obj.x);
alert(obj.y);
obj.FunX();
obj.FunY();

执行的结果十分简单,弹出5、10、5、10的结果,可以看到
复制代码 代码如下:

A.prototype.FunX = function(){alert(x)};
A.prototype.FunY = function(){alert(y)};

这两句代码定义了两个方法,分别是FunX和FunY。那么,如果现在出现了一种情况,如果我们需要临时的给A函数添加方法怎么办呢?

复制代码 代码如下:

function A(x,y)
{
this.x = x;
this.y = y;
}
A.prototype.FunX = function(){alert("5")};
var obj = new A(5,10);
alert(obj.x);
alert(obj.y);
obj.FunX();
A.prototype.FunY = function(){alert("10")};
obj.FunY();

运行这段代码,我们可以看到,弹出的结果还是和以前的结果一样,但是我们将两个方法都定义在了外边,而且方法FunY是定义在实例化之后的,那么这里大家看出来了什么没?很显然,在我们使用obj.FunY()语句时候,代码会重新的去构造一下obj,然后再来执行此方法,那么如果代码改成这样?
复制代码 代码如下:

obj.FunY();
A.prototype.FunY = function(){alert("10")};

很显然,FunY()就不会去执行方法了。

下一遍,将会说一下关于JavaScript的构造函数与原型(prototype),若有疑问或不正之处,欢迎提出指正和讨论。

相关文章

  • JavaScript 工具库 Cloudgamer JavaScript Library v0.1 发布

    JavaScript 工具库 Cloudgamer JavaScript Library v0.1 发布

    研究了一年多的js,也差不多写一个自己的js库了。 我写这个不算框架,只是一个小型的js工具库,所以我用的名字是Library。
    2009-10-10
  • Javascript 面向对象之重载

    Javascript 面向对象之重载

    在面向对象语言里重载是很重要的一个特性,而JavaScript这个自称面向对象的语言竟然没有直接提供重载的功能。
    2010-05-05
  • js对象的构造和继承实现代码

    js对象的构造和继承实现代码

    js对象的构造和继承实现代码,学习javascript面向对象的朋友可以参考下。写出跟漂亮与复用的代码。
    2010-12-12
  • javascript 写类方式之六

    javascript 写类方式之六

    这篇开始会分析流行的js库之写类方式。各种库的写类方式虽然千奇百怪,但仍然逃离不了本质---用构造函数和原型 来组装类。
    2009-07-07
  • js对象的比较

    js对象的比较

    项目中需要比较两个对象是否相等,给Object对象开展了(别紧张,别说我把它污染了),一个实现而已,象java一样可以只给自己想要的类重写equals方法。
    2011-02-02
  • JAVASCRIPT  THIS详解 面向对象

    JAVASCRIPT THIS详解 面向对象

    在面向对象编程语言中,对于this关键字我们是非常熟悉的。比如C++、C#和Java等都提供了这个关键字
    2009-03-03
  • JS 继承实例分析

    JS 继承实例分析

    主要有三种方法: 1. this.method=Parent; this.method=Parent's constructor 2. Parent.call(this,arg,arg,arg.....);3.Parent.apply(this,arg.arg...) //for Array 还是来点实际的吧...
    2008-11-11
  • JS类的封装及实现代码

    JS类的封装及实现代码

    js并不是一种面向对向的语言, 没有提供对类的支持, 因此我们不能像在传统的语言里那样 用class来定义类, 但我们可以利用js的闭包封装机制来实现js类, 我们来封装一个简的Shape类.
    2009-12-12
  • Javascript 面向对象 继承

    Javascript 面向对象 继承

    继承是面向对象中比不可少的特性,但javascript中并没有继承的概念机制,但我们可以自己来实现这种功能。
    2010-05-05
  • JavaScript面向对象之Prototypes和继承

    JavaScript面向对象之Prototypes和继承

    本文翻译自微软的牛人Scott Allen Prototypes and Inheritance in JavaScript ,本文对到底什么是Prototype和为什么通过Prototype能实现继承做了详细的分析和阐述,是理解JS OO 的佳作之一
    2012-07-07

最新评论