class ist die ES6-Syntax und eine neue Funktion von ES6. In ES6 wurde das Schlüsselwort class eingeführt, um „Klassen“ schnell zu definieren. Das Wesentliche einer Klasse ist jedoch die Funktion. Sie kann als syntaktischer Zucker betrachtet werden, wodurch das Schreiben von Objektprototypen klarer wird und der Syntax der objektorientierten Programmierung ähnlicher wird . Verwenden Sie „class“, um die Klassenmethode „class Person{//class declaration}“ oder „const Person=class{//class expression}“ zu definieren.
Die Betriebsumgebung dieses Tutorials: Windows 7-System, ECMAScript Version 6, Dell G3-Computer.
class ist die ES6-Syntax und eine neue Funktion von ES6.
In ES6 wurde das Schlüsselwort class eingeführt, um „Klassen“ schnell zu definieren.
In JS ist die Essenz von „Klasse“ die Funktion, die als syntaktischer Zucker betrachtet werden kann, wodurch die Schreibmethode des Objektprototyps prägnanter und klarer wird und eher der Syntax der objektorientierten Programmierung ähnelt.
Wir werden feststellen, dass das Erstellen einer Klasse gemäß der vorherigen Konstruktorform nicht nur dem Schreiben einer gewöhnlichen Funktion zu ähnlich ist, sondern auch, dass der Code nicht leicht zu verstehen ist.
Im neuen Standard von ES6 (ECMAScript2015) wird das Schlüsselwort class verwendet, um Klassen direkt zu definieren. Klassen sind jedoch im Wesentlichen immer noch Syntaxzucker für die oben genannten Konstruktoren und Prototypketten. Lernen Sie daher die vorherigen Konstruktoren gut kennen ist für unser Verständnis des Konzepts und der Vererbungsbeziehung von Klassen förderlicher.
Wie verwendet man also eine Klasse, um eine Klasse zu definieren? –Sie können eine Klasse auf zwei Arten deklarieren: Klassendeklaration und Klassenausdruck;
class Person{ //类声明 } const Person=class{ //类表达式 }
console.log(Person.prototype) console.log(Person.prototype.__proto__)//Object null console.log(Person.prototype.constructor)//Person console.log(typeof Person) // function var p = new Person() console.log(p.__proto__ === Person.prototype) // true
class Person { constructor(name, age) { this.name = name this.age = age this._address = "广州市" } // 普通的实例方法 // 创建出来的对象进行访问 // var p = new Person() // p.eating() eating() { console.log(this.name + " eating~") } running() { console.log(this.name + " running~") } }
Wir haben zuvor über Objekte gesprochen. Im Eigenschaftsdeskriptor wurde erwähnt, dass Objekte Setter hinzufügen können und Getter-Funktionen, sodass Klassen dies auch tun können:
class Person { constructor(name, age) { this.name = name this.age = age this._address = "广州市" } // 类的访问器方法 get address() { console.log("拦截访问操作") return this._address } set address(newAddress) { console.log("拦截设置操作") this._address = newAddress } }
class Person { constructor(name, age) { this.name = name this.age = age this._address = "广州市" } // 类的静态方法(类方法) // Person.createPerson() static randomPerson() { var nameIndex = Math.floor(Math.random() * names.length) var name = names[nameIndex] var age = Math.floor(Math.random() * 100) return new Person(name, age) } }
class Person{ } class Student extends Person{ }
Super kann an drei Stellen verwendet werden: Konstruktoren, Instanzmethoden und statische Methoden von Unterklassen;
Erben integrierter Klassen
Wir können unsere Klassen auch von integrierten Klassen erben lassen , wie Array :
class HYArray extends Array { firstItem() { return this[0] } lastItem() { return this[this.length-1] } } var arr = new HYArray(1, 2, 3) console.log(arr.firstItem()) console.log(arr.lastItem())
class mixin
面向对象的三大特性:封装、继承、多态。
前面两个我们都已经详细解析过了,接下来我们讨论一下JavaScript的多态。JavaScript有多态吗?
维基百科对多态的定义:多态(英语:polymorphism)指为不同数据类型的实体提供统一的接口,或使用一
个单一的符号来表示多个不同的类型。
非常的抽象,个人的总结:不同的数据类型进行同一个操作,表现出不同的行为,就是多态的体现。
那么从上面的定义来看,JavaScript是一定存在多态的。
// 多态: 当对不同的数据类型执行同一个操作时, 如果表现出来的行为(形态)不一样, 那么就是多态的体现. function calcArea(foo) { console.log(foo.getArea()) } var obj1 = { name: "why", getArea: function() { return 1000 } } class Person { getArea() { return 100 } } var p = new Person() calcArea(obj1) calcArea(p) // 也是多态的体现 function sum(m, n) { return m + n } sum(20, 30) sum("abc", "cba")
// 传统的面向对象多态是有三个前提: // 1> 必须有继承(是多态的前提) // 2> 必须有重写(子类重写父类的方法) // 3> 必须有父类引用指向子类对象 // Shape形状 class Shape { getArea() {} } class Rectangle extends Shape { getArea() { return 100 } } class Circle extends Shape { getArea() { return 200 } } var r = new Rectangle() var c = new Circle() // 多态: 当对不同的数据类型执行同一个操作时, 如果表现出来的行为(形态)不一样, 那么就是多态的体现. function calcArea(shape: Shape) { console.log(shape.getArea()) } calcArea(r) calcArea(c) export {}
【相关推荐:javascript视频教程、编程视频】
Das obige ist der detaillierte Inhalt vonIst die Klasse class eine es6-Syntax?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!