`

用Javascript实现静态对象、静态方法和静态属性

阅读更多

Javascript语言的面向对象特征很弱,其他面向对象语言在创建类时只要使用关键字static即可指定类为静态类,Javascript没有提供static这样的关键字,要让Javascript也具有“静态”特性只有靠一些“奇技淫巧”了。

代码中列举了两种静态方法/属性的实现方式,一种是静态类的静态方法和属性,另一种是非静态类的静态方法和属性,代码说明都写在每行的代码注释里,这里就不重复了。

JAVASCRIPT:

 

  1. /****************************************
  2. * 方法一
  3. * 类、方法、属性都为静态类型
  4. * 不能创建实例
  5. *****************************************/
  6. var Time = {
  7.     today: ‘2009-3-8′,
  8.     weather: ‘rain’,
  9.     show: function() {
  10.         alert(‘Today is ‘ + this.today);
  11.     }
  12. };
  13.  
  14. //静态对象可直接使用,无需创建实例
  15. alert(‘It is ‘ + Time.weather + ‘ today.’);
  16. Time.show();
  17.  
  18. //下面的代码会出错,因为静态类不能创建实例
  19. //var t = new Time();
  20. //t.show();
  21.  
  22. /****************************************
  23. * 方法二
  24. * 普通对象,同时拥有静态和非静态属性、方法
  25. * 可以用实例化
  26. * 注意:
  27. *   1.静态方法/属性使用类名访问
  28. *   2.非静态方法/属性使用实例名访问
  29. *****************************************/
  30. function Person(name) {
  31.     //非静态属性
  32.     this.name = name;
  33.     //非静态方法
  34.     this.show = function() {
  35.         alert(‘My name is ‘ + this.name + ‘.’);
  36.     }
  37. }
  38. //添加静态属性,人都是一张嘴
  39. Person.mouth = 1;
  40. //添加静态方法,哇哇大哭
  41. Person.cry = function() {
  42.     alert(‘Wa wa wa …’);
  43. };
  44. //使用prototype关键字添加非静态属性,每个人的牙可能不一样多
  45. Person.prototype.teeth = 32;
  46.  
  47. //非静态方法必须通过类的实例来访问
  48. var me = new Person(‘Zhangsan’);
  49. //使用非静态方法、属性
  50. me.show();
  51. alert(‘I have ‘ + me.teeth + ‘ teeth.’);
  52. //使用静态方法、属性
  53. Person.cry();
  54. alert(‘I have ‘ + Person.mouth + ‘ mouth.’);
分享到:
评论

相关推荐

    浅谈Javascript的静态属性和原型属性

    文章给各位介绍Javascript的静态方法和原型方法一个例子,如果大家对于Javascript的静态方法和原型方法不了解可以和小编一起来看看。 一段代码,了解静态方法和实例方法: [removed] //对象构造函数 function ...

    ES6 javascript中class静态方法、属性与实例属性用法示例

    主要介绍了ES6 javascript中class静态方法、属性与实例属性用法,结合实例形式分析了ES6中类的静态方法、静态属性概念、功能、使用方法与相关注意事项,需要的朋友可以参考下

    JavaScript基础之静态方法和实例方法分析

    本文实例讲述了JavaScript静态方法和实例方法。分享给大家供大家参考,具体如下: 直接定义在构造函数上的方法和属性是静态的, 定义在构造函数的原型和实例上的方法和属性是非静态的 /* -- 静态方法 -- */ ...

    javascript面象对象编程

    函数对象和其它内部对象的关系 – 对于Function, Object, Array, Date, RegExp, Math, Error等内部对象 可使用new操作来返回一个对象实例 三、类 1. 实现 2. 公有成员,私有成员,静态成员 3. 类的继承

    js面向对象之公有、私有、静态属性和方法详解

    主要详细介绍了js面向对象之公有、私有、静态属性和方法,并附上详细的示例,非常的细致全面,这里推荐给大家,有需要的小伙伴可以参考下

    JavaScript语言参考手册

    这些对象同时在客户端和服务器端的 JavaScript 中使用。 Array 属性 方法 Boolean 属性 方法 Date 属性 方法 Function 属性 方法 Math 属性 方法 Number 属性 方法 Object 属性 方法 String 属性 方法 RegExp 属性 ...

    对象复制:将静态属性,原型属性和描述符从一个对象复制到另一个对象

    对象复制 将静态属性,原型属性和描述符从一个对象复制到另一个对象。安装使用安装: $ npm install --save object-copy用法var copy = require ( 'object-copy' ) ;API将静态属性,原型属性和描述符从一个对象复制...

    详解js访问对象的属性和方法

    对象的属性和方法统称为对象的成员。 访问对象的属性 在JavaScript中,可以使用“ . ”和“ [ ] ”来访问对象的属性。 二者区别:“ . ”表示法一般作为静态对象使用时来存取属性。而“[ ]”表示法在动态存取属性时...

    JavaScript程序设计课件:Number对象.pptx

    2、Number对象常用属性及方法 成员 类型 作用 MAX_VALUE 属性 在JavaScript中所能表示的最大数值(静态成员) MIN_VALUE 属性 在JavaScript中所能表示的最小正值(静态成员) toFixed(digits) 方法 使用定点表示法来...

    JavaScript中文参考手册

    本书已经更新于 JavaScript 1.2 的新特性,其它包括了 JavaScript 支持层和样式单的属性和对象。要获得关于这些主题的详细信息,请参看 Netscape Communicator 中的动态 HTML。 目录 此参考中包含的内容 此参考...

    javascript静态的url如何传递

    "JavaScript静态URL传递方法" JavaScript静态URL传递是指在网页中通过JavaScript...JavaScript静态URL传递方法可以用于实现网页之间的数据交换、用户信息传递、页面跳转等功能,该方法可以提高网页的交互性和灵活性。

    JavaScript 对象的属性和方法4种不同的类型

    第三种类型是静态的公有类型,或者通常叫做原型属性,它的特点是每个对象实例共享唯一副本,对它的改写会相互影响。 第四种类型是类属性,它的特点是作为类型的属性而不是对象实例的属性,在没有构造对象时也能够...

    使用Javascript实现前端防御http劫持及防御XSS攻击并且对可疑攻击进行上报

    httphijack 使用Javascript实现前端防御http劫持及防御XSS攻击,并且对可疑攻击进行上报 使用方法 引入 httphijack1.0.0.js httphijack.init() 防范范围: 所有内联事件执行的代码 href 属性 [removed] 内嵌的代码 ...

    非静态字段,方法或属性需要对象引用

    您必须先学习什么是类型以及什么是实例,才能继续开发。 这是您的问题。方法(非静态)方法可用于实例。 静态方法没有对实例的引用(作为“ this”隐式传递给所有实例方法),因此...的语法

    JavaScript模式中文[pdf] 百度云

     私有属性和方法  模块模式  沙箱模式  静态成员  对象常量  链模式  method()方法  小结  第6章 代码复用模式  传统与现代继承模式的比较  使用类式继承时的预期结果  类式继承模式#1——默认模式  类...

    javascript 静态对象和构造函数的使用和公私问题

    } } 在这种形式的声明下,你可以通过objJson.op1或者objJson.fn1()来直接访问内部的属性,这没有问题。但是如果是这样: 代码如下: var objFn=function(){ this.op1=’objFn.op1′; this.op2=function(){ alert&#40...

    注意 JavaScript 中 RegExp 对象的 test 方法

    JavaScript 中的 RegExp 对象用于正则表达式相关的操作,这个对象提供了一个方法 test 来判定某个字符串是否满足某个 pattern.... (注:RegExp 全局对象有一些静态属性和方法,比如 RegExp.

    Javascript数组操作高级心得整理

     对象方法的使用 15 (2) 对象的定义与实例化 15 (3) 对象的作用域 16  JavaScript对象只有公用作用域 16  JavaScript对象没有静态作用域 16  关键字this 16 (4) 定义类或对象的方法 16  工厂方式 16  ...

Global site tag (gtag.js) - Google Analytics