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编程起步(第六课)
Feb 27 Javascript
js的压缩及jquery压缩探讨(提高页面加载性能/保护劳动成果)
Jan 29 Javascript
JS对img标签进行优化使用onerror显示默认图像
Apr 24 Javascript
javascript实现百度地图鼠标滑动事件显示、隐藏
Apr 02 Javascript
JavaScript数组对象赋值用法实例
Aug 04 Javascript
jQuery实现点击小图显示大图代码分享
Aug 25 Javascript
jQuery实现进度条效果代码
Dec 17 Javascript
jQuery编写设置和获取颜色的插件
Jan 09 Javascript
如何开发出更好的JavaScript模块
Dec 22 Javascript
VUE Error: getaddrinfo ENOTFOUND localhost
May 03 Javascript
jQuery中将json数据显示到页面表格的方法
May 27 jQuery
JS实现简易日历效果
Jan 25 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获取url参数方法总结
2014/11/13 PHP
浅谈PHP中Stream(流)
2015/06/08 PHP
php使用变量动态创建类的对象用法示例
2017/02/06 PHP
laravel-admin 在列表页添加自定义按钮的例子
2019/09/30 PHP
jquery ajax abort()的使用方法
2010/10/28 Javascript
Windows 系统下安装和部署Egret的开发环境
2014/07/31 Javascript
js中split和replace的用法实例
2015/02/28 Javascript
js完美解决IE6不支持position:fixed的bug
2015/04/24 Javascript
JS取模、取商及取整运算方法示例
2016/10/13 Javascript
JavaScript中关于iframe滚动条的去除和保留
2016/11/17 Javascript
BootStrap Table 设置height表头与内容无法对齐的问题
2016/12/28 Javascript
Vue.js之slot深度复制详解
2017/03/10 Javascript
bootstrap fileinput组件整合Springmvc上传图片到本地磁盘
2017/05/11 Javascript
vue中axios处理http发送请求的示例(Post和get)
2017/10/13 Javascript
Bootstrap栅格系统的使用详解
2017/10/30 Javascript
JS动态添加元素及绑定事件造成程序重复执行解决
2017/12/07 Javascript
微信小程序自定义tabBar组件开发详解
2020/09/24 Javascript
分享一个vue项目“脚手架”项目的实现步骤
2019/05/26 Javascript
layui 解决form表单点击无反应的问题
2019/10/25 Javascript
JavaScript实现Tab标签页切换的最简便方式(4种)
2020/06/28 Javascript
jQuery实现鼠标拖拽登录框移动效果
2020/09/13 jQuery
APIStar:一个专为Python3设计的API框架
2018/09/26 Python
使用python将excel数据导入数据库过程详解
2019/08/27 Python
使用Bazel编译TensorBoard教程
2020/02/15 Python
基于MUI框架使用HTML5实现的二维码扫描功能
2018/03/01 HTML / CSS
Myholidays美国:在线旅游网站
2019/08/16 全球购物
Perfume’s Club美国官网:西班牙第一家在线美容店
2020/06/10 全球购物
测试驱动开发的主要步骤是什么
2014/12/10 面试题
css animation配合SVG制作能量流动效果
2021/03/24 HTML / CSS
夜不归宿检讨书
2014/02/25 职场文书
小学数学教学经验交流材料
2014/05/22 职场文书
暑假学习心得体会
2014/09/02 职场文书
幼儿园大班开学寄语(2016秋季)
2015/12/03 职场文书
制定企业培训计划的五大要点!
2019/07/10 职场文书
CSS3常见动画的实现方式
2021/04/14 HTML / CSS
Python实战之用tkinter库做一个鼠标模拟点击器
2021/04/27 Python