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 相关文章推荐
jquerymobile checkbox及时刷新才能获取其准确值
Apr 14 Javascript
jquery实现多级下拉菜单的实例代码
Oct 02 Javascript
快速解决jquery之get缓存问题的最简单方法介绍
Dec 19 Javascript
JQuery选择器、过滤器大整理
May 26 Javascript
js实现将选中值累加到文本框的方法
Aug 12 Javascript
js鼠标点击按钮切换图片-图片自动切换-点击左右按钮切换特效代码
Sep 02 Javascript
jQuery实现最简单的切换图效果【可兼容IE6、火狐、谷歌、opera等】
Sep 04 Javascript
jQuery实现鼠标滑过预览图片大图效果的方法
Apr 26 jQuery
老生常谈js中的MVC
Jul 25 Javascript
深入理解js A*寻路算法原理与具体实现过程
Dec 13 Javascript
通过vue手动封装on、emit、off的代码详解
May 29 Javascript
解决element-ui里的下拉多选框 el-select 时,默认值不可删除问题
Aug 14 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封装分页函数实现文本分页和数字分页
2014/10/23 PHP
PHP统计当前在线用户数实例讲解
2015/10/21 PHP
微信网页授权(OAuth2.0) PHP 源码简单实现
2016/08/29 PHP
PHP入门教程之会话控制技巧(cookie与session)
2016/09/11 PHP
php 利用socket发送GET,POST请求的实例代码
2020/07/04 PHP
top.location.href 没有权限 解决方法
2008/08/05 Javascript
jquery tools之tooltip
2009/07/25 Javascript
基于jquery的大众点评,分类导航实现代码
2011/08/23 Javascript
Javascript继承机制的设计思想分享
2011/08/28 Javascript
JavaScript使用pop方法移除数组最后一个元素用法实例
2015/04/06 Javascript
javascript实现简单的分页特效
2015/08/12 Javascript
谈谈JavaScript中浏览器兼容问题的写法小议
2016/12/17 Javascript
js判断iframe中元素是否存在的实现代码
2016/12/24 Javascript
JS+canvas绘制的动态机械表动画效果
2017/09/12 Javascript
Vue结合Video.js播放m3u8视频流的方法示例
2018/05/04 Javascript
Jquery动态列功能完整实例
2019/08/30 jQuery
pyqt4教程之widget使用示例分享
2014/03/07 Python
详解python3实现的web端json通信协议
2016/12/29 Python
使用tensorflow实现AlexNet
2017/11/20 Python
python实现12306抢票及自动邮件发送提醒付款功能
2018/03/08 Python
python使用pygame框架实现推箱子游戏
2018/11/20 Python
详解Python中的测试工具
2019/06/09 Python
选择Python写网络爬虫的优势和理由
2019/07/07 Python
tensorflow使用指定gpu的方法
2020/02/04 Python
python encrypt 实现AES加密的实例详解
2020/02/20 Python
python爬虫学习笔记之pyquery模块基本用法详解
2020/04/09 Python
基于python实现计算两组数据P值
2020/07/10 Python
Django crontab定时任务模块操作方法解析
2020/09/10 Python
欧洲最古老的鞋厂:Peter Kaiser
2019/11/05 全球购物
市场营销职业生涯规划书范文
2014/01/12 职场文书
开学典礼感言
2014/02/16 职场文书
幼儿园门卫岗位职责范本
2014/07/02 职场文书
刑事辩护授权委托书
2014/09/13 职场文书
2014年党员个人工作总结
2014/12/02 职场文书
党支部2014年度工作总结
2014/12/04 职场文书
新年寄语2016
2015/08/17 职场文书