JS常用的静态方法

JavaScript019

JS常用的静态方法,第1张

 静态方法属于整个类所有,因此调用它不用实例化,可以直接调用------ 类.静态方法() ====>Array.from()/Array of(),Object.is(),Math.ceil().....,不难发现这些 静态方法都是类作为调用对象使用的

 实例方法必须先实例化,创建一个对象,才能进行调用------ 对象.实例方法()

①Object.is()

用来比较两个值是 否严格相等 ,与严格比较运算符(===)的行为基本一致。

②Object.assign()

用于对象的 合并 ,将多个对象的所有可枚举属性复制到目标对象。

newObject:目标对象

object1,object2,object3…:源对象

添加属性

添加方法

③Object.keys()

返回值为对象的所有属性名组成的数组

④Object.values()

返回值为对象的所有值组成的数组

⑤Object.entries()

成员是参数对象自身的(不含继承的)所有可遍历属性的 键值对数组 。

①Array.from()

用于将两类对象转化为真正的数组: 类数组对象,和可遍历的对象

②Array.isArray()

用于判断一个对象是否为数组,如果是返回true,否则返回false

③Array.of()

用于将一组 数据 装进一个 数组 中。

Array()              // [  ]

Array(7)            // [ , , , , , , ] 相当于数组长度为7

Array(1, 2, 3)    // [1, 2, 3]

Array.of()          // [  ]

Array.of(7)        // [7] 这里写7那就是数组中有一个7

Array.of(1, 2, 3)  // [1, 2, 3]

Array.of() 方法不存在 Array() 由于参数个数不同而导致的重载,它的行为很稳定,所以一般用前者代替后者。

①Number.isFinite(), Number.isNaN()

Number.isFinite()用来检查一个 数值 是否为有限的(finite)

Number.isNaN()用来检查一个值是否为NaN 。

Number.isFinite()对于非数值一律返回false, Number.isNaN()只有对于NaN才返回true,非NaN一律返回false。

①Math.trunc()

Math.trunc方法用于 去除一个数的小数部分 , 返回整数部分。

②Math.sign()

Math.sign方法用来判断一个数到底是正数、负数、还是零。 对于非数值,会先将其转换为数值 。

它会返回五种值。

参数为正数,返回+1;

参数为负数,返回-1;

参数为 0,返回0;

参数为-0,返回-0

其他值,返回NaN。

1)PI 取圆周率

2)abs() 取绝对值

3)ceil() 向上取整

4)floor() 向下取整

5)round() 四舍五入

6)max() 取最大值

7)min() 取最小值

8)pow() 取X的y次幂

9)random() 取随机数 >=0 <1

现在有如下一个Person类:

类中定义了基本属性name 和age

```

  function Person( name, age){

        this.name = name||"lorentz"

        this.age  = age||27

    }

```

首先我们给它添加一个实例方法,即通过实例化该类,在类的实例上可以调用的方法

```

function Person( name, age){

        this.name = name||"lorentz"

        this.age  = age||27

    }

      //定义在原型上的方法 可以在实例上直接调用

    Person.prototype.sayAge = function(){

        console.log(`my age is ${this.age}`)

    }

    let p1 = new Person()

    p1.sayAge()  //my age is 27

```

通过构造函数的原型,定义了一个sayAg方法,所有的实例都可以通过原型链调用该方法。

静态方法即不需要实例化,可以直接利用构造函数调用的方法。在JS中,函数也是一个对象。将构造函数对象的某个属性设置为一个函数即为静态方法:

注意静态方法里this指向构造函数对象Person,而不是构造函数的实例

```

   function Person( name, age){

        this.name = name||"lorentz"

        this.age  = age||27

    }

      //定义在原型上的方法 可以在实例上直接调用

    Person.prototype.sayAge = function(){

        console.log(`my age is ${this.age}`)

    }

    Person.staticMethod = function(){

        console.log(`i am a static method `) //i am a static method 

        //静态方法中的this指向Person这个构造函数对象,在该对象里是没有age这个属性的

        console.log(`my age is ${this.age}`) // my age is undefined

        console.log(this)  //[Function: Person] { staticMethod: [Function (anonymous)] }

    }

    Person.staticMethod()   

```

在构造函数里定义私有方法,该方法无法在外部直接访问,通过闭包可以访问该方法

注意此时Person是一个普通函数,返回了一个对象,通过返回的对象可以访问他的私有方法

```

 function Person( name, age){

        this.name = name||"lorentz"

        this.age  = age||27

        let privateMethod = function(){

            console.log(`i am a priviate method`)

        }

        return {

            fn: privateMethod

        }

    }

    let p = Person()

    p.fn()  //i am a priviate method

```