Javascript语言的面向对象特征非常弱。其它面向对象语言在创建类时仅仅要使用keywordstatic就可以指定类为静态类,Javascript没有提供static这种keyword。要让Javascript也具有“静态”特性仅仅有靠一些“奇技淫巧”了。

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

/****************************************
* 方法一
* 类、方法、属性都为静态类型
* 不能创建实例
*****************************************/
var Time = {
    today: ‘2009-3-8′, 
    weather: ‘rain’, 
    show: function() {
alert(‘Today is ‘ + this.today); 
}
}; 
 
//静态对象可直接使用,无需创建实例
alert(‘It is ‘ + Time.weather + ‘ today.’); 
Time.show(); 
 
//以下的代码会出错,由于静态类不能创建实例
//var t = new Time();
//t.show();
 
/****************************************
* 方法二
* 普通对象,同一时候拥有静态和非静态属性、方法
* 能够用实例化
* 注意:
*   1.静态方法/属性使用类名訪问
*   2.非静态方法/属性使用实例名訪问
*****************************************/
function Person(name) {
//非静态属性
this.name = name; 
//非静态方法
this.show = function() {
alert(‘My name is ‘ + this.name + ‘.’); 
}
}
//加入静态属性。人都是一张嘴
Person.mouth = 1; 
//加入静态方法。哇哇大哭
Person.cry = function() {
alert(‘Wa wa wa …’); 
}; 
//使用prototypekeyword加入非静态属性,每一个人的牙可能不一样多
Person.prototype.teeth = 32; 
 
//非静态方法必须通过类的实例来訪问
var me = new Person(‘Zhangsan’); 
//使用非静态方法、属性
me.show(); 
alert(‘I have ‘ + me.teeth + ‘ teeth.’); 
//使用静态方法、属性
Person.cry(); 
alert(‘I have ‘ + Person.mouth + ‘ mouth.’);
//
var p=new Person("x");
alert(p.mouth);//回显示没有定义
p.cry();//会显示Uncaught TypeError: Object #<Person> has no method 'cry'
能够发现,实例对象没法訪问类的静态方法和属性。须要訪问仅仅能使用类名

<span style="color:#333333;">function Person(name){
this.name=name;
this.show=function(){
alert("My Name is "+this.name);
};
}; Person.mouth=1;
Person.cry=function(){
alert("wa wa");
}
Person.prototype.teeth=32; var p=new Person("x");
alert(Person["mouth"]);//1
p["show"]();//My name is x</span>


在Jquery中能够这样使用对象的静态方法和属性:
var arr=new Array();
arr["push"]("x");
alert(arr["length"]);//1

欢迎大家补充讨论,共同进步!





使用JAVASCRIPT实现静态物体、静态方法和静态属性的更多相关文章

  1. java静态变量、静态方法和静态代码段

    先上实例 public class TestStatic { public static String staticString = "this is a static String&quo ...

  2. Java中实例方法,实例变量,静态方法,静态变量,final方法重写的问题,覆盖

    Java中只有非私有的实例方法能被重写,即实现多态,子类可以覆盖父类的方法,但是实例变量不能覆盖,若子类和父类均定义了同样名称的变量,则对于子类来说这是两个不同的变量,要想调用父类的变量必须显示去调用 ...

  3. C#中静态类、静态方法和静态变量的简单说明

    静态方法与静态变量一样,属于类本身,而不属于哪个类的一个对象.调用一个被定义为static的方法,只有通过在它前面加上这个类的名称.一般定义里说是可以通过实例调用的.其他语言我还没测试,但是在C#中是 ...

  4. php函数、类和对象以及类的封装、继承、类的静态方法、静态属性

    1.函数     php内置函数可以直接使用,如果没有安装php扩展即可     自定义函数 //函数function 函数名 function dump($var = null){ //支出默认参数 ...

  5. 关于Java的静态:静态类、静态方法、静态变量、静态块等

    原文地址:Java static keyword - Class, Method, Variable, Block, import - JournalDev 很少看到文章能把静态这个问题解释的很清楚, ...

  6. 在Cocos2D中改变动态物体为静态物体

    原文链接,有压缩和简化 1.导入一个新的头文件 首先你要知道,不是所有Chimpunk特性都通过Cocos2d的类暴露出来,比如CCPhysicsNode和CCPhysicsBody.对于一些更高级的 ...

  7. 从JVM内存管理的角度谈谈JAVA类的静态方法和静态属性

    在JVM中,内存分为两个部分,Stack(栈)和Heap(堆),这里,我们从JVM的内存管理原理的角度来认识Stack和Heap,并通过这些原理认清Java中静态方法和静态属性的问题. 一般,JVM的 ...

  8. Vue2.x源码学习笔记-Vue静态方法和静态属性整理

    Vue静态方法和静态属性,其实直接在浏览器中可以查看到的,如下 圈起来的是其静态属性,但是有的属性对象中的属性的值又是函数.未圈起来的则是函数. 其实它来自如下各个目录下的js文件 // src/co ...

  9. C# 多线程调用静态方法或者静态实例中的同一个方法-方法内部的变量是线程安全的

    C#  多线程调用静态方法或者静态实例中的同一个方法-方法内部的变量是线程安全的 using System;using System.Threading;using System.Threading. ...

  10. java中的静态变量、静态方法与静态代码块详解与初始化顺序

      我们知道类的生命周期分为装载.连接.初始化.使用和卸载的五个过程.其中静态代码在类的初始化阶段被初始化. 而非静态代码则在类的使用阶段(也就是实例化一个类的时候)才会被初始化. 静态变量 可以将静 ...

随机推荐

  1. java Date 和 javascript Date

    近期写一个页面.上面要展示下日期. 在Java中生成了Date.然后将这个Date通过velocity送入vm模板其中 代码例如以下: var dates = new Date("$!{pp ...

  2. SQL ---指令实例语句

    1 1 create database+数据库名字 创建数据库 2 2 create table+表的名字 创建表 3 表中的操作: 4 3 insert into 表名 (列名1,列名2··)val ...

  3. Socket编程之聊天程序 - 模拟Fins/ModBus协议通信过程

    设备控制软件编程涉及到的基本通信方式主要有TCP/IP与串口,用到的数据通信协议有Fins与ModBus. 更高级别的通信如.net中的Remoting与WCF在进行C/S架构软件开发时会采用. 本篇 ...

  4. MVVM Light须要注意的10个问题

    MVVM Light须要注意的10个问题 从使用XAML技术基础開始(实际上并非非常久曾经).我便关注MVVM(Model – View – ViewModel)模式.偶然接触到MVVM Light不 ...

  5. symbol(s) not found for architecture i386

    此问题针对百度地图真机调试和模拟器.a文件的选取问题 "$(SRCROOT)/MobileYonyou/Third/BaiduMap_IOSSDK_v2.3.0_Lib/Release$(E ...

  6. 【编程之美】java二进制实现重建

    package com.cn.binarytree.utils; /** * @author 刘利娟 liulijuan132@gmail.com * @version 创建时间:2014年7月20日 ...

  7. linux c socket 案源

    service结束 #include <sys/types.h> #include <sys/socket.h> #include <stdio.h> #inclu ...

  8. jQuery EasyUI API 中文文档 - 布局(Layout)

    <html> <head> <script src="jquery-easyui/jquery.min.js"></script> ...

  9. 利用json获取天气信息

    天气预报信息获取是利用json获取的,网上有非常多资源,源码.因为上面涉及到非常多天气信息,包含湿度,出行建议等,以及加入了全部城市代码的资源包.为了练手了解json的原理.我仅获取诚笃城市的最高温, ...

  10. [非官方]ArcGIS10.2 for Desktop扩展工具包——XTools Pro

    XTools Pro 是一套为ArcGIS平台设计的矢量空间分析. 形状转换和表管理扩展工具,大大增强了 ArcGIS 的功能,使用该工具能够提高 ArcGIS 用户的效率和性能. XTools Pr ...