实例方法必须先实例化,创建一个对象,才能进行调用------ 对象.实例方法()
①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
在react 类组件的生命周期中,有一个静态方法 getDerivedStateFromProps ,曾经让我使用起来比较困惑。先来看看官方是怎么解释这个方法的:
在一个class中定义的字段,我们称之为实例字段。实例字段的特点是,每个实例都有独立的字段,各个实例的同名字段互不影响。
还有一种字段,是用static修饰的字段,称为静态字段:static field。
实例字段在每个实例中都有自己的一个独立“空间”,但是静态字段只有一个共享“空间”,所有实例都会共享该字段。
简单的说,类就相当于实例的原型, 所有在类中定义的方法, 都会被实例继承。 如果在一个方法前, 加上static关键字, 就表示该方法不会被实例继承, 而是直接通过类来调用, 这就称为“ 静态方法”。
直接看下静态方法的demo:
这实际上跟直接将其作为属性赋值的作用相同:
在 User.staticMethod() 调用中的 this 的值是类构造器 User 自身(“点符号前面的对象”规则)。
通常,静态方法用于实现属于该类但不属于该类任何特定对象的函数。
现在有如下一个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
```