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 indexOf方法入门实例(计算指定字符在字符串中首次出现的位置)
Oct 17 Javascript
javascript中数组方法汇总
Jul 07 Javascript
使用JavaScript制作一个简单的计数器的方法
Jul 07 Javascript
全屏滚动插件fullPage.js使用实例解析
Oct 21 Javascript
jQueryUI Sortable 应用Demo(分享)
Sep 07 jQuery
vue自定义filters过滤器
Apr 26 Javascript
详解vue-router 命名路由和命名视图
Jun 01 Javascript
详解vue-loader在项目中是如何配置的
Jun 04 Javascript
js中null与空字符串""的区别讲解
Jan 17 Javascript
在Vue中使用this.$store或者是$route一直报错的解决
Nov 08 Javascript
vue实现微信浏览器左上角返回按钮拦截功能
Jan 18 Javascript
vue打包npm run build时候界面报错的解决
Aug 13 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的朋友 经常问的一些问题。不断更新
2011/08/11 PHP
PHP+MYSQL会员系统的登陆即权限判断实现代码
2011/09/23 PHP
apache+codeigniter 通过.htcaccess做动态二级域名解析
2012/07/01 PHP
用PHP实现浏览器点击下载TXT文档的方法详解
2013/06/02 PHP
PHP借助phpmailer发送邮件
2015/05/11 PHP
Laravel程序架构设计思路之使用动作类
2018/06/07 PHP
浅析PHP7的多进程及实例源码
2019/04/14 PHP
修改Laravel自带的认证系统的User类的命名空间的步骤
2019/10/15 PHP
Jquery从头学起第四讲 jquery入门教程
2010/08/01 Javascript
基于jquery的获取浏览器窗口大小的代码
2011/03/28 Javascript
一分钟理解js闭包
2016/05/04 Javascript
微信小程序 获取微信OpenId详解及实例代码
2016/10/31 Javascript
用headjs来管理和加载js 提高网站加载速度
2016/11/29 Javascript
JavaScript实现图片无缝滚动效果
2017/07/07 Javascript
Vue中render方法的使用详解
2018/01/26 Javascript
bootstrap table.js动态填充单元格数据的多种方法
2019/07/18 Javascript
Vue中遍历数组的新方法实例详解
2019/07/21 Javascript
详解微信小程序「渲染层网络层错误」的解决方法
2021/01/06 Javascript
python批量同步web服务器代码核心程序
2014/09/01 Python
Python开发最牛逼的IDE——pycharm
2018/08/01 Python
Python使用matplotlib绘制三维图形示例
2018/08/25 Python
从DataFrame中提取出Series或DataFrame对象的方法
2018/11/10 Python
Python实现监控Nginx配置文件的不同并发送邮件报警功能示例
2019/02/26 Python
Python chardet库识别编码原理解析
2020/02/18 Python
Python各种扩展名区别点整理
2020/02/27 Python
PyTorch 中的傅里叶卷积实现示例
2020/12/11 Python
我未来的职业规划范文
2014/01/11 职场文书
群众路线查摆问题整改措施思想汇报
2014/10/10 职场文书
2014年班组长工作总结
2014/11/20 职场文书
高校教师个人总结
2015/02/10 职场文书
幼儿园圣诞节活动总结
2015/05/06 职场文书
房地产项目合作意向书
2015/05/08 职场文书
2016年禁毒宣传活动总结
2016/04/05 职场文书
uni-app 微信小程序授权登录的实现步骤
2022/02/18 Javascript
python画条形图的具体代码
2022/04/20 Python
win10电脑老是死机怎么办?win10系统老是死机的解决方法
2022/08/05 数码科技