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 相关文章推荐
关于递归运算的顺序测试代码
Nov 30 Javascript
JS实现网页表格自动变大缩小的方法
Mar 09 Javascript
JavaScript之AOP编程实例
Jul 17 Javascript
JS的框架Polymer中的dom-if和is属性使用说明
Jul 29 Javascript
Bootstrap树形菜单插件TreeView.js使用方法详解
Nov 01 Javascript
彻底学会Angular.js中的transclusion
Mar 12 Javascript
移动端Ionic App 资讯上下循环滚动的实现代码(跑马灯效果)
Aug 29 Javascript
AngularJS实现注册表单验证功能
Oct 16 Javascript
AngularJS监听ng-repeat渲染完成的方法
Mar 20 Javascript
新手快速入门JavaScript装饰者模式与AOP
Jun 24 Javascript
防止Layui form表单重复提交的实现方法
Sep 10 Javascript
vue实现移动端触屏拖拽功能
Aug 21 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实现的交通银行网银在线支付接口ECSHOP插件和使用例子
2014/05/10 PHP
php实现快速对二维数组某一列进行组装的方法小结
2019/12/04 PHP
WordPress伪静态规则设置代码实例
2020/12/10 PHP
JavaScript中获取元素索引的函数
2010/09/10 Javascript
js中通过split函数分割字符串成数组小例子
2013/09/21 Javascript
getJSON调用后台json数据时函数被调用两次的原因猜想
2013/09/29 Javascript
javascript中Object使用详解
2015/01/26 Javascript
javascript实现淘宝幻灯片广告展示效果
2015/04/27 Javascript
JS 实现banner图片轮播效果(鼠标事件)
2017/08/04 Javascript
js原生日历的实例(推荐)
2017/10/31 Javascript
IE11下使用canvas.toDataURL报SecurityError错误的解决方法
2017/11/19 Javascript
解决iView中时间控件选择的时间总是少一天的问题
2018/03/15 Javascript
JavaScript递归函数定义与用法实例分析
2019/01/24 Javascript
qrcode生成二维码微信长按无法识别问题的解决
2019/04/04 Javascript
vue 实现 rem 布局或vw 布局的方法
2019/11/13 Javascript
JavaScript交换两个变量方法实例
2019/11/25 Javascript
WebStorm中如何将自己的代码上传到github示例详解
2020/10/28 Javascript
跟老齐学Python之做一个小游戏
2014/09/28 Python
python实现查找两个字符串中相同字符并输出的方法
2015/07/11 Python
利用Python将时间或时间间隔转为ISO 8601格式方法示例
2017/09/05 Python
Python装饰器用法示例小结
2018/02/11 Python
python将文本中的空格替换为换行的方法
2018/03/19 Python
如何使用VSCode愉快的写Python于调试配置步骤
2018/04/06 Python
Python对excel文档的操作方法详解
2018/12/10 Python
django 类视图的使用方法详解
2019/07/24 Python
Lookfantastic香港官网:英国知名美妆购物网站
2018/06/19 全球购物
获取邓白氏信用报告:Dun & Bradstreet
2019/01/22 全球购物
你常见到的runtime exception
2016/09/05 面试题
《童年》教学反思
2014/02/18 职场文书
诚信承诺书模板
2014/05/26 职场文书
中秋节活动总结
2014/08/29 职场文书
工作失误检讨书(3篇)
2014/10/11 职场文书
西双版纳导游词
2015/02/03 职场文书
工作简报怎么写
2015/07/21 职场文书
幼师必备:幼儿园期末教师评语50条
2019/11/01 职场文书
Redis sentinel哨兵集群的实现步骤
2022/07/15 Redis