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,实例方法就只能老老实实的使用对象.方法名()的形式调用了。 

 

转载于:https://www.cnblogs.com/EvileOn/p/5515216.html

### ES6 中 Class 的静态方法静态属性 #### 静态属性的定义与使用 在 ES6 中,可以通过 `static` 关键字来声明类的静态属性。这些属性属于类本身而不是实例对象,因此无法通过实例访问它们,只能通过类名直接调用。 例如,在下面的例子中展示了如何定义并使用静态属性: ```javascript class Person { static _name = "user"; // 静态属性 static _age = 18; // 静态属性 constructor(name, age) { this._name = name; this._age = age; } } console.log(Person._name); // 输出: user console.log(Person._age); // 输出: 18 ``` 上述代码片段说明了静态属性 `_name` `_age` 是直接绑定到 `Person` 类上的[^2]。 --- #### 静态方法的定义与使用 同样地,也可以利用 `static` 来定义静态方法。这类方法也归属于类而非其实例,所以也只能经由类名称去调用它。需要注意的是,静态方法内部的 `this` 指向该类本身,这意味着它可以访问其他静态属性或者静态方法,但不能直接操作非静态成员。 以下是关于静态方法的一个例子及其执行情况: ```javascript class Person { static _name = "user"; static _age = 18; static test() { console.log("静态方法"); } static readme() { console.log(`${this._name} ${this._age}`); this.test(); } } Person.readme(); // 输出: user 18 静态方法 ``` 这里可以看到,当调用了 `readme()` 这一静态方法时,成功打印出了静态属性的内容以及另一个静态方法的结果。 --- #### 继承中的表现形式 如果存在继承关系,则父类所拥有的任何静态方法都能够被其子类自动获取下来。这表明即使是在派生出来的类别里头也没有必要重新实现那些已经存在于基底里的功能逻辑。 示例如下所示: ```javascript class Box { static a() { console.log('我是父类的静态方法a'); } } class Desk extends Box {} Desk.a(); // 我是父类的静态方法a ``` 此段脚本验证了即便没有显式地于 `Desk` 子类之中再次编写相同的函数体结构,依旧能够正常运作并且输出预期的信息[^3]。 --- #### 构造器的作用补充说明 另外值得注意的一点就是每一个基于 `class` 所构建起来的新实体都必须具备唯一的构造器(`constructor`)用来完成必要的初始化工作;如果有多个同名者则会引发错误提示:“A class may only have one constructor”。除此之外还有所谓的原型方法像上面提到过的那样也是构成整个体系不可或缺的一部分[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值