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 相关文章推荐
Ext.get() 和 Ext.query()组合使用实现最灵活的取元素方式
Sep 26 Javascript
jquery遍历select元素(实例讲解)
Dec 31 Javascript
使用jQuery的attr方法来修改onclick值
Jul 07 Javascript
在JavaScript中构建ArrayList示例代码
Sep 17 Javascript
js+jquery常用知识点汇总
Mar 03 Javascript
js实现汉字排序的方法
Jul 23 Javascript
对于jQuery性能的一些优化建议
Aug 13 Javascript
js无提示关闭浏览器窗口的两种方法分析
Nov 06 Javascript
页面缩放兼容性处理方法(zoom,Firefox火狐浏览器)
Aug 29 Javascript
EL表达式截取字符串的函数说明
Sep 22 Javascript
vue解决使用webpack打包后keep-alive不生效的方法
Sep 01 Javascript
微信小程序自定义带价格显示日历效果
Dec 29 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
解决了Ajax、MySQL 和 Zend Framework 的乱码问题
2009/03/03 PHP
使用php记录用户通过搜索引擎进网站的关键词
2014/02/13 PHP
WordPress开发中的get_post_custom()函数使用解析
2016/01/04 PHP
PHP中用mysqli面向对象打开连接关闭mysql数据库的方法
2016/11/05 PHP
CI框架常用函数封装实例
2016/11/21 PHP
extjs 为某个事件设置拦截器
2010/01/15 Javascript
jquery.validate使用攻略 第三部
2010/07/01 Javascript
ASP.NET jQuery 实例5 (显示CheckBoxList成员选中的内容)
2012/01/13 Javascript
分享Javascript中最常用的55个经典小技巧
2013/11/29 Javascript
JavaScript获取URL汇总
2015/06/08 Javascript
JS实现网页Div层Clone拖拽效果
2015/09/26 Javascript
JQuery的Pager分页器实现代码
2016/05/03 Javascript
Bootstrap模态框插件使用详解
2017/05/11 Javascript
原生js轮播特效
2017/05/18 Javascript
javascript函数的节流[throttle]与防抖[debounce]
2017/11/15 Javascript
vue里面使用mui的弹出日期选择插件实例
2018/09/16 Javascript
JS实现li标签的删除
2019/04/12 Javascript
原生JavaScript实现日历功能代码实例(无引用Jq)
2019/09/23 Javascript
Python中遍历字典过程中更改元素导致异常的解决方法
2016/05/12 Python
hmac模块生成加入了密钥的消息摘要详解
2018/01/11 Python
详解Python if-elif-else知识点
2018/06/11 Python
如何用Python合并lmdb文件
2018/07/02 Python
Python3并发写文件与Python对比
2019/11/20 Python
html5中监听canvas内部元素点击事件的三种方法
2019/04/28 HTML / CSS
商务日语毕业生自荐信范文
2013/11/14 职场文书
工作疏忽检讨书
2014/01/25 职场文书
请假条标准格式规范
2014/04/10 职场文书
大学新学期计划书
2014/04/28 职场文书
师德师风的心得体会
2014/09/02 职场文书
党员四风自我剖析材料思想汇报
2014/09/13 职场文书
2014年市场部工作总结
2014/11/25 职场文书
优质服务心得体会(共4篇)
2016/01/22 职场文书
Golang 编译成DLL文件的操作
2021/05/06 Golang
mybatis 获取无数据的字段不显示的问题
2021/07/15 Java/Android
Rust 连接 PostgreSQL 数据库的详细过程
2022/01/22 PostgreSQL
MySQL表锁、行锁、排它锁及共享锁的使用详解
2022/04/02 MySQL