`
superbo8888
  • 浏览: 51484 次
  • 性别: Icon_minigender_1
  • 来自: 成都
最近访客 更多访客>>
社区版块
存档分类
最新评论

(转贴)JS之OOP(一)

阅读更多

考虑刚开始写,没有多少感觉的,就将网上的一篇文章转载(我也是受它的启发才想到JS的OOP的).原文如下:

在写面向对象的WEB应用程序方面JavaSciprt是一种很好的选择.它能支持OOP.因为它通过原型支持继承的方式和通过属性和方法的方式一样好.很多开发者试图抛弃JS,试着用C#或JAVA仅是因为JS不是他认为合适的面向对象的语言.许多人还没有认识到javascript支持继承.当你写面向对象的代码时.它能给你很强大的能量.你也可以使用它写出可复用,可封装的代码.

对象为何如此伟大?
    面向对象思想的成功是由于它仿照了现实中的事物和事物的联系.事物有属性和方法.如果我们描述一个台灯.我们会说它的高度和宽度,比如12CM."开灯"这个动作是它的方法.当它是处于开着的状态时.它可以被调亮一点或暗一点(也就是亮度这个属性值变大或变小).
   
javascript 给予了为WEB应用程序创建对象的能力.对象在需要的时候相应的事件会被触发,代码封装后,它能被实例化很多次.在javascript里有几种创建对象的方法,在不同的场合可用不同的方法

1.1JS创建对象方式之一用 new Object() 来创建对象

.最简单的就是用new 操作符,例如:
<script language="javascript" type="text/javascript">
person = new Object()
person.name = "Tim Scarfe"
person.height = "6Ft"
person.run = function() {
       this.state = "running"
       this.speed = "4ms^-1"
}
</script>
我们在这个例子里定义了person这个对象,然后加入了它的属性和方法.在这个例子里,自定义的方法里有两个属性.

1.2.用文字记号Literal Notation创建对象
用文字记号也可以创建对象,但要javascript 1.2以上版本.它的创建形式是多样的.
<script language="javascript" type="text/javascript">
// Object Literals
timObject = {
      property1 : "Hello",
      property2 : "MmmMMm",
      property3 : ["mmm", 2, 3, 6, "kkk"],
      method1 : function(){
         alert("Method had been called" + this.property1)
       }
};
timObject.method1();
alert(timObject.property3[2]) // 结果为3

var circle = { x : 0, y : 0, radius: 2 } // another example
// 嵌套也是允许的哦.
var rectangle = {
          upperLeft : { x : 2, y : 2 },
         lowerRight : { x : 4, y : 4}
}
alert(rectangle.upperLeft.x) // 结果为2
</script>
文字记号可是是数组,也可以是任意的javascript表达式或值.
用 new 操作符或文字记号创建一个自定义对象都是简单的,也是符合逻辑的.但它最大的缺点就是结果不可复用.也不能很容易的用不同的版本初始化创建对象.例如上面的第一个例子,如果 person 的 name 不是 "Tim Scarfe",那样我们不得不重新定义整个对象,仅仅为了适应它的一点点改变.

1.3.对象的构造和原型
   在OOP的世界里,用先前的方法定义对象在许多场合都有限制.我们需要一种创建对象的方法,类型可以被多次使用而不用重新定义.对象在实例化时每次都可以按需分配不同的值.实现这个目标的标准方法是用对象构造器函数.

   一个对象构造器只不过是个有规则的javascript函数,它就象一个容器(定义参数,调用其他函数等等).它们两者所不同的是构造器函数是由 new 操作符调用的.(你将在下面的例子中看到).基于函数语法形式的对象定义,我们可以使它工作得最好.

让我们用现实世界中的猫来举个例子.猫的 name 和 color 是猫的属性.meeyow(猫叫)是它的一个方法.重要的是任何不同的猫都可能有不同的 name 和 meeyow 的叫声.为了建立适应这些特征的对象类,我们将使用对象构造器.
<script language="javascript" type="text/javascript">
function cat(name) {
       this.name = name; 
       this.talk = function() {
              alert( this.name + " say meeow!" )
       }
}
cat1 = new cat("felix")
cat1.talk() //alerts "felix says meeow!"
cat2 = new cat("ginger")
cat2.talk() //alerts "ginger says meeow!"
</script>
在这里,函数 cat() 是一个对象构造器,它的属性和方法在函数体里用this来定义,用对象构造器定义的对象用 new 来实例化.主意我们如何非常容易的定义多个cat 的实例.每一个都有自己的名字,这就是对象构造器带给我们的灵活性.
构造器建立了对象的蓝图.并不是对象本身.

在原型里增加方法.
在上面我们看到的例子里,对象的方法是在构造器里定义好的了.另外一种实现的途径是通过原型(prototype).xxx
原型是javascript继承的一种形式.我们可以为对象定义好后,再创造一个方法.原来所有对象的实例都将共享.
让我们来扩展最初的 cat 对象.增加一个改名的方法.用 prototype 的方式.
<script language="javascript" type="text/javascript">

cat.prototype.changeName = function(name) {
          this.name = name;
}
firstCat = new cat("pursur")
firstCat.changeName("Bill")
firstCat.talk() //alerts "Bill says meeow!"
</script>
就象你所看到的.我们仅只用了 关键字 prototype 实现了在对象定义后马上增加了changeName方法.这个方法被所有的实例共享.

用原型(prototype) 重载 javascript 对象
原型 在自定义对象和有选择性的重载对象上都可以工作.比如 Date() 或 String .这可能是无止境的.

1.4.子类和超类
下面一个例子演示了如何继承
<script language="javascript" type="text/javascript">
function superClass() {
         this.supertest = superTestMethod; //attach method superTest
}

function superTestMethod() {
         return "superTest";
}

function subClass() {
         this.inheritFrom = superClass;
         this.inheritFrom();
         this.subtest = subTestMethod; //attach method subTest
}

function subTestMethod() {
        return "subTest";
}

var newClass = new subClass();
alert(newClass.subtest()); // 弹出"subTest"
alert(newClass.supertest()); // 弹出 "superTest"
</script>
1.5.访问对象属性
正如你所知, (.)操作符能够用来操作对象属性和方法,而([]) 操作符用来操作数组.
<script language="javascript" type="text/javascript">
// 这两种用法是相同的
object.property
object["property"]
</script>
<script language="javascript">
function Circle (xPoint, yPoint, radius) {
       this.x = xPoint;
       this.y = yPoint;
       this.r = radius;
}
var aCircle = new Circle(5, 11, 99);
alert(aCircle.x);
alert(aCircle["x"]);
</script>
我们可以通过for in循环来遍历对象的属性。
<script language="javascript" type="text/javascript">
var testObj = {
      prop1 : "hello",
      prop2 : "hello2",
      prop3 : new Array("hello",1,2)
}
for(x in testObj) {
     alert( x + "-" + testObj[ x ] )
}
</script>
<script language="javascript">
var Circle = { // another example
       x : 0,
       y : 1,
      radius: 2
}

for(p in Circle) {
       alert( p + "-" + Circle[ p ] )
}
</script>

分享到:
评论
3 楼 herick 2007-05-25  
学习了,杨老大~~
能不能写一篇关于CVS和CVSNT配置使用的文章!
偶建了个CVS服务器,怎么也不能用Eclipse的CVS客户端连上去,
老报连接错误
2 楼 tjtj1314 2007-05-24  
给老大扎起
1 楼 energykk 2007-05-24  
头一次知道js可以这样搞,不错不错!

相关推荐

    javascript oop模式讲解

    JavaScript OOP(面向对象编程)模式是编程领域中一种重要的设计思想,它允许开发者通过类和对象来组织和管理代码,提高代码的可重用性和可维护性。在这个讲解中,我们将深入探讨JavaScript中的OOP模式,特别是如何...

    JavaScript与OOP js面向对象教程.ppt

    JavaScript与OOP js面向对象教程.ppt

    JavaScript与OOP讲座

    JavaScript是一种广泛应用于Web开发的脚本语言,尤其在前端领域占据着核心地位。它以其灵活性、动态性以及与HTML和CSS的紧密集成而受到青睐。然而,JavaScript不仅仅是一门简单的脚本语言,它同样支持面向对象编程...

    jquery_js_oop

    《jQuery JS OOP:深入理解JavaScript面向对象编程》 在JavaScript的世界里,面向对象编程(Object-Oriented Programming,简称OOP)是一种重要的编程范式,它允许我们以类和对象的方式来组织代码,提高代码的复用...

    js-oop.rar_control

    在 "js-oop.rar_control" 中,我们可以推测这是一个与 JavaScript OOP 相关的压缩包,可能包含了一些示例代码或工具,用于帮助开发者更好地理解和应用 OOP 技术。 在 Fireball.CodeEditor 控件中,我们看到了一个源...

    Javascript(OOP).rar_javascript_javascript O_oop javascript

    JavaScript,作为一种广泛应用于Web开发的动态编程语言,其面向对象编程(Object-Oriented Programming,简称OOP)特性是理解其高级用法的关键。本文档深入探讨了JavaScript中的面向对象特性,包括类、对象、继承、...

    oop与javascript

    ### OOP与JavaScript详解 #### 一、面向对象编程(OOP)基础概念 面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式,它通过“对象”这一概念来组织程序结构,使得程序更加模块化、易于理解和维护。...

    Javascript的OOP编程

    JavaScript的面向对象编程(Object-Oriented Programming, OOP)是一种强大的编程范式,它允许开发者创建复杂的结构和数据模型,提高代码的可维护性和复用性。在JavaScript中,OOP主要通过构造函数、原型链、封装、...

    JavaScript OOP 课程库.zip

    JavaScript OOP 课程库JavaScript 面向对象编程Telerik Academy的JavaScript OOP课程库JavaScript OOP是关于构建低级用户界面的。本课程涵盖 DOM、jQuery、事件、使用 HTML5 Canvas 和模板的图形和动画等主题课程...

    JAVA OOP 第一章作业

    封装是面向对象的三大特性之一,它隐藏了对象的内部实现细节,只对外提供公共接口进行交互。在Java中,我们使用访问修饰符(public, private, protected)来控制字段和方法的可见性,以实现封装。 3. 继承 继承允许...

    JavaScript与OOP

    在JavaScript的世界里,面向对象编程(Object-Oriented Programming, OOP)是一种重要的编程范式,它允许开发者创建可复用、可维护的代码结构。 **面向对象编程基础** OOP的核心概念包括类、对象、封装、继承和多态...

    清华大学oop第一讲

    清华大学的这门课程“面向对象程序设计(英)第一讲”由Hailong Yao教授,主要涵盖OOP的基本原理和C++实现。课程内容丰富,旨在提升学生的编程技能和程序设计能力,让学生能够理解和应用面向对象的方法。 首先,...

    Java 第一阶段建立编程思想 【零钱通(OOP)】---- 代码

    Java 第一阶段建立编程思想 【零钱通(OOP)】---- 代码 Java 第一阶段建立编程思想 【零钱通(OOP)】---- 代码 Java 第一阶段建立编程思想 【零钱通(OOP)】---- 代码 Java 第一阶段建立编程思想 【零钱通(OOP)...

    javascript与OOP__PPT

    在JavaScript中,面向对象编程(OOP)是一种重要的编程范式,它允许开发者创建具有封装性、继承性和多态性的复杂结构。本PPT主要介绍了JavaScript中的OOP概念,包括Function对象的apply方法、自定义对象、封装、继承...

    JavaOOP_第1章上机练习.zip

    Java面向对象编程(Object-Oriented Programming,简称OOP)是Java编程的核心概念,也是现代软件开发中的基础设计理念。在"JavaOOP_第1章上机练习.zip"这个压缩包中,我们可以预见到它包含了关于Java OOP的初步学习...

    javascript的oop

    JavaScript的面向对象编程(OOP)是Web开发中不可或缺的一部分,它允许我们通过类和对象来组织和管理代码,提高代码的复用性和可维护性。这篇博客文章(链接已提供)深入探讨了JavaScript中的OOP概念,我们将在这里...

    2014年辛星PHP教程秋季版之OOP与MVC.pdf

    2.之所以说 oop 是一种思想,是因为很多编程语言对它的具体实现 上还是有较大的不同的。比如 python 中函数和变量也都是对象, Javascript 中有很多的伪对象,Java 则是完全的面向对象,而 Java 和 PHP 等语言都只能...

    OOP设计的一套比较好的架构

    面向对象编程(Object-Oriented Programming,简称OOP)是一种广泛应用的编程范式,它以对象为核心,通过封装、继承和多态等机制来组织代码,使得程序更易于理解和维护。一套优秀的OOP架构能够提高代码的可读性、可...

    javascript的oop思想以及单例,工厂,观察者模式简例

    JavaScript是一种动态类型的脚本语言,广泛应用于Web开发,它的面向对象编程(OOP)思想是其强大功能的重要组成部分。在JavaScript中,OOP主要通过构造函数、原型链和闭包来实现。本篇文章将深入探讨JavaScript的OOP...

    JAVAOOP课本一到五章全套练习答案

    本压缩包包含了Java OOP课本一到五章的全套练习及答案,旨在帮助学习者深入理解和掌握这一关键编程技术。 第一章节通常会介绍OOP的基本概念,包括封装、继承、多态这三大特性。封装是隐藏对象的属性和实现细节,仅...

Global site tag (gtag.js) - Google Analytics