区别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

转载于:https://www.cnblogs.com/jadeshu/p/10663642.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值