大多数浏览器的 ES5 实现之中,每一个对象都有 (1)子类的 (2)子类 class A {}class B extends A {}B.__proto__ === A // trueB.prototype.__proto__ === A.prototype // true 上面代码中,子类 类相当于实例的原型, 所有在类中定义的方法, 都会被实例继承。 如果在一个方法前, 加上static关键字, 就表示该方法不会被实例继承, 而是直接通过类来调用, 这就称为“ 静态方法”。 class Animal {constructor(name, age) {//实例的私有属性this.name = namethis.age = agereturn console.log('实例属性')}test=['hello'] //实例私有属性,即使写在constructor外面,也是实例属性。animalFun() {console.log('Animal实例方法');}static animalAttr = 'Animal静态属性'static animalStaFun() {console.log('Animal静态方法');}}class Dog extends Animal {constructor(name, age, color, weight) {super(name, age)this.color = colorthis.weight = weight}}// 继承了Animal类的实例属性和实例方法let dog = new Dog('二狗', 1, 'black', '10kg')console.log(dog);dog.animalFun()// 继承Animal类的静态属性和静态方法console.log(Dog.animalAttr);Dog.animalStaFun()console.log(Dog.prototype.__proto__ === Animal.prototype);console.log(dog.__proto__.__proto__ === Animal.prototype);console.log(Dog.__proto__ === Animal);// 实例方法和实例属性写在哪// 实例可以调用的方法和属性// 静态方法和静态属性写在哪// 类本身调用的方法和属性输出为:实例属性Dog { name: '二狗', age: 1, color: 'black', weight: '10kg' }Animal实例方法Animal静态属性Animal静态方法truetruetrue 注意:静态属性与静态方法由类构造函数调用,即上文中的Dog, 实例属性与实例方法由实例对象调用,即上文中的dog。 |
|
来自: ZhouAndrew > 《Web技术》