JS中类的静态方法,静态变量,实例方法,实例变量区别与用法实例分析


Posted in Javascript onMarch 14, 2020

本文实例讲述了JS中类的静态方法,静态变量,实例方法,实例变量区别与用法。分享给大家供大家参考,具体如下:

1.类的静态方法

先来段代码之后分析

// JS类静态函数
function BaseClass() {
}
// 类添加add函数
BaseClass.add = function() {
  console.log("BaseClass add()方法被调用");
};
// 类方法(类的静态函数)直接调用
// 类名.类方法名
BaseClass.add(); //BaseClass add()方法被调用
var instance = new BaseClass();
// 实例不能调用类方法(即类的静态方法)
//instance.add();

a.类的静态方法通过[类名.类方法名称]赋值;
b.调用时用[类名.类方法名称()]直接调用;
C.类的实例无法调用类的静态函数。
 原因:因在js中function也是对象,即给函数对象添加了一个函数

2.类的静态成员

先来段代码之后分析

// JS类的静态成员变量
function BaseClass(params) {
}
// 类添加静态变量nameTest
BaseClass.nameTest = "jadeshu";
// 类的静态变量直接调用
// 类名.类变量名
console.log(BaseClass.nameTest); // jadeshu
var instance = new BaseClass();
// 实例不能调用类的静态成员变量)
console.log(instance.nameTest);  // undefined

a.类的静态变量通过[类名.类变量名称]赋值;
b.调用时用[类名.类变量名称]直接调用;
C.类的实例调用类的静态变量为undefined。
  -----原因:因在js中function也是对象,即给函数对象添加了一个属性

3.实例方法(两种情况)

I.单个实例的方法

// JS的单个实例方法
function BaseClass() {
}
var instance1 = new BaseClass();
// 单个实例添加成员方法
instance1.add = function (params) {
  console.log("BaseClass类实例的add方法被调用" + params);
};
instance1.add(11222); // BaseClass类实例的add方法被调用11222
var instance2 = new BaseClass();
//instance2.add(); // Error: instance2.add is not a function

II.所有实例创建时都创建了同名的方法

// JS所有实例的共享方法
function BaseClass() {
  // 所有实例创建时都创建了同名的方法
  this.add = function (params) {
    console.log("BaseClass类实例的add方法被调用" + params);
  };
}
var instance1 = new BaseClass();
instance1.add(11); // BaseClass类实例的add方法被调用11
var instance2 = new BaseClass();
//实例1和实例2各有一个add函数的本地方法
instance2.add(22); // BaseClass类实例的add方法被调用22
console.log(instance1.add === instance2.add); // false

方法也是每个实例各存在一个,占用内存,这既没有必要,又浪费系统资源,所以不建议这样添加实例的本地方法,或者在外部定义函数,然后直接赋给一个变量即可,就可以做到所有创建的实例都引用一份代码,但这样做代码不优雅。

// JS所有实例的共享方法
function add(params){
  console.log("BaseClass类实例的add方法被调用" + params);
}
function BaseClass() {
  // 所有实例创建时都创建了同名的方法
  this.add = add;
}
var instance1 = new BaseClass();
instance1.add(11); // BaseClass类实例的add方法被调用11
var instance2 = new BaseClass();
//实例1和实例2则共用add函数的代码
instance2.add(22); // BaseClass类实例的add方法被调用22
console.log(instance1.add === instance2.add); // true

单个实例添加方法建议直接如第一种方法,如果是共享方法就加入prototype属性上[即js中采用原型]。

4.实例变量(两种情况)---即是实例的本地属性

I.单个实例的变量

// JS的单个实例成员变量
function BaseClass() {
}
var instance1 = new BaseClass();
// 单个实例添加成员变量
instance1.nameTest = "jadeshu";
console.log(instance1.nameTest); // jadeshu
var instance2 = new BaseClass();
console.log(instance2.nameTest); // instance2.nameTest is undefined

II.所有实例创建的时候都创建了同名的各自本地属性变量

// JS所有实例共享的成员变量
function BaseClass() {
  // 所有实例创建时都有的同名实例变量
  this.nameTest = "jadeshu";
}
var instance1 = new BaseClass();
instance1.nameTest = "shu"; // 改变实例1的变量nameTest的值为shu
console.log(instance1.nameTest);  // shu
var instance2 = new BaseClass();
//实例1和实例2各自都有一个nameTest
console.log(instance2.nameTest);; // jadeshu

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码运行效果。

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
用jquery实现学校的校历(asp.net+jquery ui 1.72)
Jan 01 Javascript
jQuery 验证插件 Web前端设计模式(asp.net)
Oct 17 Javascript
妙用Bootstrap的 popover插件实现校验表单提示功能
Aug 29 Javascript
简单学习vue指令directive
Nov 03 Javascript
js 奇葩技巧之隐藏代码
Aug 11 Javascript
解析vue路由异步组件和懒加载案例
Jun 08 Javascript
解决循环中setTimeout执行顺序的问题
Jun 20 Javascript
jquery获取select选中值的文本,并赋值给另一个输入框的方法
Aug 21 jQuery
JS使用Date对象实时显示当前系统时间简单示例
Aug 23 Javascript
详解axios中封装使用、拦截特定请求、判断所有请求加载完毕)
Apr 09 Javascript
jQuery实现移动端图片上传预览组件的方法分析
May 01 jQuery
原生JavaScript实现换肤
Feb 19 Javascript
js中forEach,for in,for of循环的用法示例小结
Mar 14 #Javascript
JS原型prototype和__proto__用法实例分析
Mar 14 #Javascript
JS数组的高级使用方法示例小结
Mar 14 #Javascript
vue-resource post数据时碰到Django csrf问题的解决
Mar 13 #Javascript
js函数和this用法实例分析
Mar 13 #Javascript
js对象简介与基本用法示例
Mar 13 #Javascript
JS自定义滚动条效果
Mar 13 #Javascript
You might like
如何使用PHP中的字符串函数
2006/11/24 PHP
php5数字型字符串加解密代码
2008/04/24 PHP
php使HTML标签自动补全闭合函数代码
2012/10/04 PHP
浅谈PHP面向对象之访问者模式+组合模式
2017/05/22 PHP
YII框架实现自定义第三方扩展操作示例
2019/04/26 PHP
父窗口获取弹出子窗口文本框的值
2006/06/27 Javascript
关于Aptana Studio生成自动备份文件的解决办法
2009/12/23 Javascript
jQuery 获取对象 定位子对象
2010/05/31 Javascript
JavaScript快速检测浏览器对CSS3特性的支持情况
2012/09/26 Javascript
JS随机生成不重复数据的实例方法
2013/07/17 Javascript
javascript生成随机大小写字母的方法
2014/02/20 Javascript
jQuery实现锚点scoll效果实例分析
2015/03/10 Javascript
AngularJS ng-repeat指令中使用track by子语句解决重复数据遍历错误问题
2017/01/21 Javascript
Angularjs中的$apply及优化使用详解
2018/07/02 Javascript
vue.js添加一些触摸事件以及安装fastclick的实例
2018/08/28 Javascript
使用Vue做一个简单的todo应用的三种方式的示例代码
2018/10/20 Javascript
[06:44]2018DOTA2亚洲邀请赛4.5 SOLO赛 MidOne vs Sumail
2018/04/06 DOTA
python通过get,post方式发送http请求和接收http响应的方法
2015/05/26 Python
python 基础教程之Map使用方法
2017/01/17 Python
Python(TensorFlow框架)实现手写数字识别系统的方法
2018/05/29 Python
使用Scrapy爬取动态数据
2018/10/21 Python
Python使用python-docx读写word文档
2019/08/26 Python
详解mac python+selenium+Chrome 简单案例
2019/11/08 Python
解决使用python print打印函数返回值多一个None的问题
2020/04/09 Python
Python填充任意颜色,不同算法时间差异分析说明
2020/05/16 Python
Python脚本实现监听服务器的思路代码详解
2020/05/28 Python
解决Pytorch自定义层出现多Variable共享内存错误问题
2020/06/28 Python
详解HTML5之pushstate、popstate操作history,无刷新改变当前url
2017/03/15 HTML / CSS
如何通过jdbc调用存储过程
2012/04/19 面试题
中学生团员自我评价分享
2013/12/07 职场文书
门卫工作岗位职责
2013/12/17 职场文书
关于工作时间玩手机的检讨书
2014/09/18 职场文书
费用申请报告范文
2015/05/15 职场文书
党支部审查意见
2015/06/02 职场文书
六一儿童节新闻稿
2015/07/17 职场文书
Golang日志包的使用
2022/04/20 Golang