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 相关文章推荐
JavaScript 对Cookie 操作的封装小结
Dec 31 Javascript
JavaScript中获取未知对象属性的代码
Apr 27 Javascript
javascript和HTML5利用canvas构建猜牌游戏实现算法
Jul 17 Javascript
JavaScript数组去重的五种方法
Nov 05 Javascript
JavaScript实现身份证验证代码
Feb 17 Javascript
用jQuery向div中添加Html文本内容的简单实现
Jul 13 Javascript
JS倒计时实例_天时分秒
Aug 22 Javascript
JavaScript 中的 this 简单规则
Sep 19 Javascript
浅谈mint-ui 填坑之路
Nov 06 Javascript
vue init webpack 建vue项目报错的解决方法
Sep 29 Javascript
vue-cli2 构建速度优化的实现方法
Jan 08 Javascript
JS 逻辑判断不要只知道用 if-else 和 switch条件判断(小技巧)
May 27 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转成EXE文件
2006/10/09 PHP
了解Joomla 这款来自国外的php网站管理系统
2010/03/11 PHP
Linux下PHP连接Oracle数据库
2014/08/20 PHP
Yii使用ajax验证显示错误messagebox的解决方法
2014/12/03 PHP
phpcms配置列表页以及获得文章发布时间
2017/07/04 PHP
记录Yii2框架开发微信公众号遇到的问题及解决方法
2018/07/20 PHP
jQuery基础知识filter()和find()实例说明
2010/07/06 Javascript
js获取单选框或复选框值及操作
2012/12/18 Javascript
js星星评分效果
2014/07/24 Javascript
wap手机图片滑动切换特效无css3元素js脚本编写
2014/07/28 Javascript
javascript跨域总结之window.name实现的跨域数据传输
2015/11/01 Javascript
Vue实现双向绑定的原理以及响应式数据的方法
2018/07/02 Javascript
通过循环优化 JavaScript 程序
2019/06/24 Javascript
VUE中使用HTTP库Axios方法详解
2020/02/05 Javascript
Element实现表格嵌套、多个表格共用一个表头的方法
2020/05/09 Javascript
echarts柱状图背景重叠组合而非并列的实现代码
2020/12/10 Javascript
在Python中使用mechanize模块模拟浏览器功能
2015/05/05 Python
Python中__init__.py文件的作用详解
2016/09/18 Python
Python调用C++程序的方法详解
2017/01/24 Python
Python实现FTP文件传输的实例
2019/07/07 Python
解决Python二维数组赋值问题
2019/11/28 Python
python线程定时器Timer实现原理解析
2019/11/30 Python
PyTorch安装与基本使用详解
2020/08/31 Python
python操作redis数据库的三种方法
2020/09/10 Python
selenium携带cookies模拟登陆CSDN的实现
2021/01/19 Python
上海某公司.net方向笔试题
2014/09/14 面试题
薪酬专员岗位职责
2014/02/18 职场文书
超市客服工作职责
2014/06/11 职场文书
组工干部演讲稿
2014/09/02 职场文书
奥巴马上海演讲稿
2014/09/10 职场文书
祖国在我心中演讲稿(小学生)
2014/09/23 职场文书
2014年营业员工作总结
2014/11/18 职场文书
2014年音乐教师工作总结
2014/12/03 职场文书
升职自荐信范文
2015/03/27 职场文书
2015年文明创建工作总结
2015/04/30 职场文书
HTML5来实现本地文件读取和写入的实现方法
2021/05/25 HTML / CSS