Class类的特性(上)

Class类的特性(上)

ES6 的类,完全可以看作ES5构造函数的另一种写法。

class Point {
  // ...
}

typeof Point // "function"
Point === Point.prototype.constructor // true
上面代码表明,类的数据类型就是函数,类本身就指向构造函数。

构造函数的prototype属性,在 ES6 的“类”上面继续存在。事实上,类的所有方法都定义在类的prototype属性上面。

class Point {
  constructor() {
    // ...
  }

  toString() {
    // ...
  }

  toValue() {
    // ...
  }
}

// 等同于

Point.prototype = {
  constructor() {},
  toString() {},
  toValue() {},
};








Object.assign只拷贝当前那一层的基本数据类型
let target = {a: 123};
let source1 = {b: 456};
let source2 = {c: 789,data:{ff:1}};
let obj = Object.assign(target, source1, source2);

console.log(obj)  //{a: 123, b: 456, c: 789, data: {ff:1}}
obj.data.ff       //1
source2 .data.ff="fffffffff"
console.log(obj)  //{a: 123, b: 456, c: 789, data: {ff:fffffffff}}
obj.data.ff        //"fffffffff"


类不显式定义constructor的话,引擎会自动加。
类必须new调用,而构造函数可以直接调用。


constructor方法默认返回实例对象(即this),完全可以指定返回另外一个对象。

class Foo {
  constructor() {
    return Object.create(null);
  }
}

new Foo() instanceof Foo
// false
上面代码中,constructor函数返回一个全新的对象,结果导致实例对象不是Foo类的实例。


与 ES5 一样,实例的属性除非显式定义在其本身(即定义在this对象上),否则都是定义在原型上(即定义在class上)。


//定义类
class Point {

  constructor(x, y) {
    this.x = x;
    this.y = y;
  }

  toString() {
    return '(' + this.x + ', ' + this.y + ')';
  }

}

var point = new Point(2, 3);

point.toString() // (2, 3)

point.hasOwnProperty('x') // true
point.hasOwnProperty('y') // true
point.hasOwnProperty('toString') // false
point.__proto__.hasOwnProperty('toString') // true
上面代码中,x和y都是实例对象point自身的属性(因为定义在this变量上),所以hasOwnProperty方法返回true,而toString是原型对象的属性(因为定义在Point类上),所以hasOwnProperty方法返回false。这些都与 ES5 的行为保持一致。



由于本质上,ES6 的类只是 ES5 的构造函数的一层包装,所以函数的许多特性都被Class继承,包括name属性。
name属性总是返回紧跟在class关键字后面的类名。



总结:
类中的方法能被实例继承。
类中的this指向实例。

static方法(静态方法):不能被实例调用,只能被类调用。父类中的static方法,能被子类继承。
static方法中的this指向类。

实例属性:之前一般在constructor()方法里面定义。现在直接与实例方法同级定义。(实例属性的新写法)

静态属性:static prop = 1;新写法,直接在前加static。只能被类调用。

私有方法和私有属性:是只能在类的内部访问的方法和属性,外部不能访问。(作用域影响)
私有属性和私有方法:目前是提案,是前面加# 如:#a。

原文地址:https://www.cnblogs.com/wulinzi/p/10517620.html