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 相关文章推荐
kmock javascript 单元测试代码
Feb 06 Javascript
jquery 简短几句代码实现给元素动态添加及获取提示信息
Sep 01 Javascript
自己做的模拟模态对话框实现代码
May 23 Javascript
JavaScript高级程序设计(第3版)学习笔记12 js正则表达式
Oct 11 Javascript
关于JavaScript的面向对象和继承有利新手学习
Jan 11 Javascript
EXTjs4.0的store的findRecord的BUG演示代码
Jun 08 Javascript
JS继承用法实例分析
Feb 05 Javascript
Jquery使用css方法改变样式实例
May 18 Javascript
简单理解vue中el、template、replace元素
Oct 27 Javascript
浅谈jquery选择器 :first与:first-child的区别
Nov 20 Javascript
基于Vue.js实现tab滑块效果
Jul 23 Javascript
layui 优化button按钮和弹出框的方法
Aug 15 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
DOTA2 玩家自创拉野攻略 特色英雄快速成长篇
2020/04/20 DOTA
十天学会php之第六天
2006/10/09 PHP
一个ubbcode的函数,速度很快.
2006/10/09 PHP
php中如何使对象可以像数组一样进行foreach循环
2013/08/09 PHP
php一些错误处理的方法与技巧总结
2013/08/10 PHP
jquery下checked取值问题的解决方法
2012/08/09 Javascript
js同比例缩放图片的小例子
2013/10/30 Javascript
nodejs读取memcache示例分享
2014/01/02 NodeJs
jQuery抛物线运动实现方法(附完整demo源码下载)
2016/01/08 Javascript
使用jQuery UI库开发Web界面的简单入门指引
2016/04/22 Javascript
EasyUI修改DateBox和DateTimeBox的默认日期格式示例
2017/01/18 Javascript
JavaScript设计模式之策略模式详解
2017/06/09 Javascript
JavaScript实现换肤功能
2017/09/15 Javascript
EasyUI创建人员树的实例代码
2017/09/15 Javascript
jQuery判断网页是否已经滚动到浏览器底部的实现方法
2017/10/27 jQuery
详解webpack4多入口、多页面项目构建案例
2018/05/25 Javascript
Jquery和CSS实现选择框重置按钮功能
2018/11/08 jQuery
Ajax请求时无法重定向的问题解决代码详解
2019/06/21 Javascript
微信小程序实现购物车代码实例详解
2019/08/29 Javascript
js面向对象之实现淘宝放大镜
2020/01/15 Javascript
[48:51]完美世界DOTA2联赛PWL S2 Magma vs InkIce 第一场 11.28
2020/12/02 DOTA
BP神经网络原理及Python实现代码
2018/12/18 Python
python+openCV利用摄像头实现人员活动检测
2019/06/22 Python
使用python3批量下载rbsp数据的示例代码
2019/12/20 Python
Python解析多帧dicom数据详解
2020/01/13 Python
Python基于unittest实现测试用例执行
2020/11/25 Python
处理HTML5新标签的浏览器兼容版问题
2017/03/13 HTML / CSS
美国宠物护理专家:Revival Animal Health
2020/01/05 全球购物
Python如何实现单例模式
2016/06/03 面试题
旅游专业职业生涯规划范文
2014/01/13 职场文书
一位农村小子的自荐信
2014/04/07 职场文书
汽车转让协议书
2015/01/29 职场文书
2015年党总支工作总结
2015/05/25 职场文书
停发工资证明范本
2015/06/12 职场文书
2015年女工委工作总结
2015/07/27 职场文书
毕业设计工作总结
2015/08/14 职场文书