js静态属性和静态方法

Posted EvileOn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js静态属性和静态方法相关的知识,希望对你有一定的参考价值。

啥也不说了,直接上代码。。。(就是这么任性)

    var Animal = function(){};
    Animal.name = "dog";
    var a = new Animal();

    console.log(a.name); 

结果如图 :

 

很明显这样调用是不可以的,那如果console.log(Animal.name)这样呢?

    var Animal = function(){
        Animal.name++;
    };
    Animal.name = 0;
    // var a = new Animal();

    console.log(Animal.name); 

 

 静态方法是指不需要声明类的实例就可以使用的方法

 纳尼?结果是这样了滴。。。。。为毛?

 那这样呢?

     function Animal (){
        // alert(Animal.name);
        this.say = function(){
            console.log(Animal.name);
        }
    };
    Animal.name = "Ev2le0";
    var a = new Animal();

    a.say(); 

结果是:

 

纳尼,哭晕在wc了。。。 

 

算了还是写静态方法吧 

    function staticClass(){};//声明一个类
    //为这个类添加一个静态方法
    staticClass.staticMethod = function(){
        console.log("this is a static method");
    }

    //声明一个实例方法
    staticClass.prototype.instanceMethod = function(){
        console.log("this is a instance method");
    }

    //尝试调用一下静态方法,分别使用2种方式
    var a = new staticClass();

    a.staticMethod(); 

 结果是这样滴:

 

 再试一下类名.方法名的调用方式

    function staticClass(){};//声明一个类
    //为这个类添加一个静态方法
    staticClass.staticMethod = function(){
        console.log("this is a static method");
    }

    //声明一个实例方法
    staticClass.prototype.instanceMethod = function(){
        console.log("this is a instance method");
    }

    //尝试调用一下静态方法,分别使用2种方式
    var a = new staticClass();
    // a.staticMethod();

    staticClass.staticMethod();

 结果是这样子滴:

 

 那调用实例方法能不能用类名.方法名()的形式呢?

    function staticClass(){};//声明一个类
    //为这个类添加一个静态方法
    staticClass.staticMethod = function(){
        console.log("this is a static method");
    }

    //声明一个实例方法
    staticClass.prototype.instanceMethod = function(){
        console.log("this is a instance method");
    }

    //尝试调用一下静态方法,分别使用2种方式
    var a = new staticClass();
    // a.staticMethod();

    staticClass.instanceMethod(); 

 结果是这样子滴:

 

 总结:

1,对于静态方法可以使用类名.方法名()

2,实例方法就只能老老实实的使用对象.方法名()的形式调用了。 

 

以上是关于js静态属性和静态方法的主要内容,如果未能解决你的问题,请参考以下文章

js静态属性和静态方法

js公有私有静态属性和方法的区别

面向对象中静态方法和属性的理解

JS面向对象 -- Object类,静态属性,闭包,私有属性, call和apply的使用,继承的三种实现方法

JS高级——静态成员与实例成员

Vue2.x源码学习笔记-Vue静态方法和静态属性整理