`
superbo8888
  • 浏览: 50979 次
  • 性别: 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 js面向对象教程.ppt

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

    javascript oop模式讲解

    javascript oop模式讲解,内容丰富充实,包含dom(一个todolistshi实例)操作。

    JavaScript与OOP讲座

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

    oop与javascript

    oop与javascript oop与javascript oop与javascript

    Javascript的OOP编程

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

    JavaScript与OOP

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

    JAVA OOP 第一章作业

    JAVA OOP 第一章作业

    Javascript(OOP).rar_javascript_javascript O_oop javascript

    面向对象的一个JavaScript文档,介绍js的面向对象性质 如何面向对象的 等等

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

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

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

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

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

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

    浅谈OOP之uml设计模式

    **OOP之UML设计模式概述** 面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式,它以对象为中心,强调数据和操作数据的方法,通过封装、继承和多态等特性来实现软件的模块化和可扩展性。在OOP中...

    javascript与oop

    javascript 是一门面向对象的语言,这里共享处理希望大家看后对大家有帮助

    PHP OOP入门必读

    "PHP5面向对象初步(第二章).php"可能涉及封装的概念,这是OOP的四大特性之一。封装允许我们将数据和操作这些数据的方法绑定在一起,保护内部数据不受外界干扰。通过访问修饰符(如public、private、protected),...

    oop实践

    面向对象编程(Object-Oriented Programming,简称OOP)是一种软件开发方法,它基于对象、类和消息传递的概念,旨在提高代码的重用性、可维护性和可扩展性。在实际的软件开发中,OOP是解决复杂问题的有效工具,通过...

    jsOOP无限极多选树

    JavaScript Object-Oriented Programming(JS OOP)是一种在JavaScript中实现面向对象编程的方法。它允许开发者使用类、对象和继承等概念来组织和抽象代码,提高代码的可维护性和复用性。在“jsOOP无限极多选树”这...

    新闻快客(纯OOP编写)

    面向对象编程是现代软件开发中的核心编程范式之一,它以类和对象为基本单元,强调数据封装、继承和多态这三大特性。这款应用的创建旨在帮助学员深入理解和实践OOP思想。 首先,我们要理解什么是面向对象编程。OOP的...

    oop(面向对象程序设计)考试题

    面向对象程序设计(Object-Oriented Programming,简称OOP)是一种广泛应用的编程范式,它以对象为中心,通过封装、继承和多态等核心概念来组织代码。在浙江大学的OOP考试中,考生通常需要对这些核心概念有深入理解...

    书籍:C语言实现OOP

    《C语言实现OOP》是一本独特而富有挑战性的书籍,它揭示了如何在传统的、非面向对象的C语言中实现面向对象编程(OOP)的概念。面向对象编程是一种广泛应用于现代软件开发的方法,它强调数据和操作数据的函数封装在...

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

    JAVAOOP中课本一到五章上机示例代码 包括解析 课后哦答案都有

Global site tag (gtag.js) - Google Analytics