使用JAVASCRIPT实现静态物体、静态方法和静态属性[通俗易懂]

使用JAVASCRIPT实现静态物体、静态方法和静态属性

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

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

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





版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/116745.html原文链接:https://javaforall.net

(0)
上一篇 2022年1月16日 下午3:00
下一篇 2022年1月16日 下午4:00


相关推荐

  • kettle工具使用教程_开源etl工具kettle

    kettle工具使用教程_开源etl工具kettlekettle工具使用简明手册运行启动脚本spoon.bat快捷方式如果正确启动,则出现的主界面应该是下面这样的。初次进入需右键新建作业新建数据库连接也可以想下面一样,新建数据库连接向导填完参数测试一下连接通过向导分步来我已经建立了转换任务和数据库连接,可以直接应用。 建立多表复制点击开始即可,多表的…

    2022年8月31日
    8
  • 重磅!百度文心一言开源,包含2个多模态大模型,4个大语言模型,最大参数量4240亿!完全免费商用授权!

    重磅!百度文心一言开源,包含2个多模态大模型,4个大语言模型,最大参数量4240亿!完全免费商用授权!

    2026年3月12日
    2
  • UReport2介绍

    UReport2介绍UReport2 介绍 UReport2 是一款基于架构在 Spring 之上纯 Java 的高性能报表引擎 通过迭代单元格可以实现任意复杂的中国式报表 在 UReport2 中 提供了全新的基于网页的报表设计器 可以在 Chrome Firefox Edge 等各种主流浏览器运行 IE 浏览器除外 使用 UReport2 打开浏览器即可完成各种复杂报表的设计制作 UReport2 是第

    2026年3月18日
    1
  • anycast RP「建议收藏」

    anycast RP「建议收藏」动态RP尽管较静态RP有一定的优点,但依旧存在缺陷,当选定了RP后,所有的流量仅仅依靠这一个RP转发组播数据流量,不能实现流量负载功能。anycastRP场景:为了增强PIM-SM中RP节点的可靠性,以及对网络中的组播流量进行分担,可在网络中选取若干RP点,运行AnycastRP,达到冗余备份,负载分担的目的。原理:多个RP配置一个相同的AnycastRP地址…

    2022年5月24日
    45
  • 成功的测试通常是运行测试用例后_成功的测试是指运行测试用例后

    成功的测试通常是运行测试用例后_成功的测试是指运行测试用例后前言用过pytest的小伙伴都知道,pytest的运行方式是非常丰富的,可以说是你想怎么运行怎么运行,想运行哪些运行哪些,那httprunner是否同样可以呢?运行用例的各种方式运行指定路径的用

    2022年7月28日
    11
  • php开源桌面会议系统,开源视频会议系统 OpenMeetings「建议收藏」

    php开源桌面会议系统,开源视频会议系统 OpenMeetings「建议收藏」OpenMeetings是一个开源的多语言跨平台可定制视频会议和协作系统,基于ApacheLicense2开源协议。它支持音频、视频,支持共享左面,文件协作处理,它还包含一个白板,通过白板可以导入各种格式的图片。它基于OpenLaszlo的新流媒体格式和开源的Flash服务器Red5(基于Java的开源流媒体服务器)。OpenMeetings视频会议具有如下特点:1、基于P2P技术,服务器压…

    2022年7月12日
    32

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号