`
ychw668
  • 浏览: 13972 次
  • 性别: Icon_minigender_1
  • 来自: 成都
最近访客 更多访客>>
文章分类
社区版块
存档分类
阅读更多

Javascript中,object就是一个associative array。一个function就是一个类。当你编写如下function时,其实就是定义了一个类,该function就是它的构造函数。

function MyObject(name, size)

       {

              this.name = name;

              this.size = size;

       }

之后,你可以方便的通过MyObject类的prototype属性来方便的扩充它。比如,你可以给他添加其他的属性和方法。

       MyObject.prototype.tellSize = function()

       {

              return "size of "+this.name+" is "+this.size;

       }

      

       MyObject.prototype.color = "red";

       MyObject.prototype.tellColor = function()

       {

              return "color of "+this.name+" is "+this.color;

       }

      

       var myobj1 = new MyObject("tiddles", "7.5 meters");

       domDiv.innerHTML += myobj1.tellColor()+"<br /><br />";

你可以想象,当你调用tellColor()方法后,结果是这样的:

color of tiddles is red

很方便的是,prototype属性可以动态添加。比如,你需要往MyObject中加入一个height属性,并希望其提供一个tellHeight()方法来获得height属性的值。你可以在上面的代码后,继续添加如下的代码:

       MyObject.prototype.height = "2.26 meters";

       MyObject.prototype.tellHeight = function()

       {

              return "height of "+this.name+" is "+this.height;

       }

之后,你可以访问一下myobj1tellHeight()方法,你可以得到如下的结果:

height of tiddles is 2.26 meters

prototype的这些动态的特性看起来有些迷人,不过我倒是反而觉得有些凉飕飕的。确实,这些特性给你很大的灵活性,可以给与你runtime改变类属性和方法的能力。不过,稍微发掘一下,会有些不良的习惯产生。

首先,如果可以动态添加属性和方法,那么很容易让人想到,当我调用时,我想要调用的属性或者方法存在不?这是一个很严肃的问题,如果当我们调用时根本没有该属性或者方法,将可能导致我们的脚本down掉。

不过也有解决办法。比如,在上面的代码中,当还没有tellHeight()方法时,我们可以如下编写代码避免发生错误:

       if (myobj1.tellHeight)

       {

              domDiv.innerHTML += myobj1.tellHeight()+"<br /><br />";

       }

注意,一定要在if语句中,不要加方法后面的那对(),否则,直接就down掉了。有兴趣的读者可以打印一下,看看分别访问myobj1.tellHeightmyobj1.tellHeight()时有什么区别。

也许,你觉得这个是小意思。加个判断嘛,不就好了?

对,但是下面一个问题更令人头痛。

属性和方法在不在的问题简单,可是属性和方法变不变化的问题可就严重了。在不在我们可以检测,变不变呢?比如,请看下面的代码:

       function MyObject(name, size)

       {

              this.name = name;

              this.size = size;

       }

      

       MyObject.prototype.color = "red";

       MyObject.prototype.tellColor = function()

       {

              return "color of "+this.name+" is "+this.color;

       }

      

       var myobj1 = new MyObject("tiddles", "7.5 meters");

       domDiv.innerHTML += myobj1.tellColor()+"<br /><br />";

      

       MyObject.prototype.color = "green";

      

       domDiv.innerHTML += myobj1.tellColor()+"<br /><br />";

该代码将产生如下结果:

color of tiddles is red
color of tiddles is green

请注意,你修改的是类MyObjectcolor属性。但是你惊奇的看到你之前实例化的对象myobj1的属性值竟然也变化了。天!如果你的项目代码是多人合作,那么,也许某个人会在编程时为了图一己之便,擅自修改你的类。于是,所有人的对象都变化了。于是,你们陷入了漫长的debug过程中。。。。。。(不要说我没有告诉你啊)

上面是属性,还有方法:

       function MyObject(name, size)

       {

              this.name = name;

              this.size = size;

       }

      

       MyObject.prototype.color = "red";

       MyObject.prototype.tellColor = function()

       {

              return "color of "+this.name+" is "+this.color;

       }

      

       var myobj1 = new MyObject("tiddles", "7.5 meters");

       domDiv.innerHTML += myobj1.tellColor()+"<br /><br />";

      

       MyObject.prototype.color = "green";

       MyObject.prototype.tellColor = function()

       {

              return "your color of "+this.name+" is "+this.color;

       }

      

       domDiv.innerHTML += myobj1.tellColor()+"<br /><br />";

这段代码的结果是:

color of tiddles is red
your color of tiddles is green

哈?原来方法也能变,汗!

问题来了。Javascript太灵活的编程方式多少让人不适应。如果整个Team的水平都比较高还可以,没人会犯这样的错误。但是,当有个毛头小伙子不知情,擅自修改类,将导致所有的人的对象都发生变化,无论是属性还是方法。在Javascript代码变得越来越多的Ajax时代,这是一个严重的问题。

这说明,编写Javascript时,好的编程风格更加重要。记得某人曾经说过这样的话,想JavaC#这些比较严格的语言,虽然降低了灵活性,但也减少了犯错误的可能。这样,即使一个新手,他写出的代码也不会与高手差太多。但是,像Javascript这样的脚本语言,由于太灵活,所以,高手写出的是天使,而新手写的,可能是魔鬼!


分享到:
评论

相关推荐

    javascript oop模式讲解

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

    javascript oop开发滑动(slide)菜单控件.docx

    ### JavaScript OOP 开发滑动 (Slide) 菜单控件 #### 一、概述 在本篇文章中,我们将探讨如何使用JavaScript面向对象编程(OOP)来开发一个可滑动的菜单控件。该控件能够根据用户的交互(如鼠标悬停)动态展示或隐藏...

    JavaScript OOP

    JavaScript OOP,自己对js的一点学习心得,希望能对大家有所帮助,谢谢大家的积分和支持!

    Javascript(OOP).rar_javascript_javascript O_oop javascript

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

    Javascript oop设计模式 面向对象编程简单实例介绍

    JavaScript中的面向对象编程(OOP)是一种强大的编程范式,它允许我们以更接近现实世界的方式来组织代码。在JavaScript中,我们通常通过构造函数、原型和封装等概念来实现OOP。 首先,让我们看下传统的JavaScript...

    javascript-OOP:JavaScript OOP

    JavaScript OOP,即JavaScript面向对象编程,是JavaScript语言中一种重要的编程范式,它使得代码更加结构化、可维护和可重用。在JavaScript中,OOP主要通过类(Class)和对象(Object)来实现,同时利用了封装、继承...

    SoftUni---JavaScriptOOP:为 SoftUni 的 JavaScript OOP 课程提供作业解决方案

    JavaScript面向对象编程(Object-Oriented Programming,简称OOP)是JavaScript编程中极其重要的...在SoftUni---JavaScriptOOP-master这个压缩包中,可能包含了这些知识点的练习和示例代码,供学生实践和巩固所学知识。

    JAVASCRIPT OOP -- 参考资料

    NULL 博文链接:https://orange5458.iteye.com/blog/1387988

    玩转JavaScript OOP – 类的实现详解

    总的来说,JavaScript的OOP主要包括对象的创建、属性和方法的定义、以及继承和多态等概念。通过构造函数和原型对象,我们可以模拟类的结构,实现面向对象的设计模式,有效地组织和复用代码。理解这些概念对于编写...

    JavaScriptOOP:JavaScript 面向对象编程

    JavaScriptOOP,即JavaScript面向对象编程,是JavaScript编程中一种重要的编程范式,它使得代码更加模块化、可维护性和可重用性更强。在JavaScript中,面向对象编程主要依赖于三大特性:封装、继承和多态。接下来,...

    Sample-JavaScript-OOP-Exam-Restaurant-Manager:示例 JavaScript OOP 考试 - 餐厅经理

    在本项目"Sample-JavaScript-OOP-Exam-Restaurant-Manager"中,我们探讨了如何使用面向对象编程(OOP)技术来构建一个餐厅管理系统的JavaScript应用。这个项目主要适用于学习JavaScript OOP概念和实践的学员,通过...

    JavaScriptOOP-Homeworks

    JavaScriptOOP-Homeworks 是一个关于JavaScript面向对象编程(Object-Oriented Programming,简称OOP)的学习资源,可能是某个在线课程或教程的作业集合。这个压缩包可能包含了一系列的练习、项目或代码示例,旨在...

    javascript-oop-presentation:Javascript OOP演示

    JavaScript面向对象编程(OOP)是现代Web开发中不可或缺的一部分,尤其对于构建复杂、可维护的应用程序至关重要。在这个演示中,我们将深入探讨JavaScript中的面向对象编程概念,以便软件工程师能够更好地理解和应用...

    JavaScipt-OOP:JavaScript OOP课程作业

    JavaScript面向对象编程(Object-Oriented Programming,OOP)是JavaScript开发中不可或缺的一部分,它允许开发者组织代码,创建可重用的组件,并实现更复杂的逻辑。在这个“JavaScript OOP课程作业”中,我们将会...

    JavaScript OOP面向对象介绍

    ### JavaScript OOP面向对象介绍 #### 一、面向对象编程(OOP)概念 面向对象编程(Object-Oriented Programming,简称OOP)是一种程序设计思想。它将计算机程序视为一组对象的集合,而每个对象都可以接收其他对象...

    js_oop_info:关于 JavaScript OOP 的信息

    Javascript OOP 基础术语Field::一个不是函数的变量var x = 1; 方法:一个变量就是一个函数var x = function(){}; 成员:方法或字段Class : 一个旨在通过使用new关键字被多个实例重用的函数(还有其他方法可以创建一...

    javascriptoop:oo js的代码段

    以下是关于"javascriptoop:oo js的代码段"中涉及的关键知识点: 1. **类**: 在ES6(ECMAScript 2015)之前,JavaScript并没有内置的类机制,而是通过函数和原型来模拟类的概念。ES6引入了`class`关键字,提供了一...

    javascript的oop

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

    JavaScriptOOP

    JavaScriptOOP,即JavaScript面向对象编程,是JavaScript语言中一种重要的编程范式,它使得代码更加模块化、可重用且易于维护。在JavaScript中,面向对象编程主要依赖于对象、类、继承、封装和多态等核心概念。 1. ...

Global site tag (gtag.js) - Google Analytics