1、类名首字母一般都是大写
2、可以当成普通函数调用,但一般都通过new关键字调用,通过关键字调用会生成一个新的对象
3、通过new关键字创建的对象,给当前的this绑定成新创建的对象
4、给当前类定义一个方法,通常绑定在原型上
-
- function Person(name, age) {
- this.name = name;
- this.age = age;
- }
- Person.prototype.running = function () {
- console.log(this.age, this.name, "running");
- };
- var p = new Person("why", 18);
- console.log(p.name, p.age);
- p.running();
-
1、想要给类中传值,在ES6里面所有的类都可以实现一个方法 constructor(构造方法)
2、类中定义方法直接写在类里面,与ES5中原型绑定方法效果是一致的
类的定义:
- // ES6定义类
- class Person {
- // 构造方法:在创建类的时候会创建一个方法
- // 通过new关键字创建实例的时候会被执行
- constructor(name, age) {
- this.name = name;
- this.age = age;
- }
- // 定义方法
- running() {
- console.log(this.name, this.age, "running");
- }
- }
- const p = new Person("why", 18);
- p.running();
-
- // this绑定
- // call 可以主动给一个函数绑定this
- let func = p.running;
- var obj = {
- name: "edit",
- age: 1,
- };
- // func.call(obj);
- func = func.bind(obj);
- func();
类的继承
面向对象有三大特性
1、封装
2、继承
(1)减少重复代码
(2)多态的前提(弱类型语言鸭子类型)
3、多态
-
- class Person {
- constructor(name, age) {
- this.name = name;
- this.age = age;
- }
- running() {
- console.log("running");
- }
- }
-
- class Student extends Person {
- constructor(name, age, sno) {
- // 构造器中如果有继承需要初始化父类对象,父类中才会有相关东西,才能调用this, super必须调用
- super(name, age);
- this.sno = sno;
- }
- }
- const stu = new Student("why", 18, 151);
- console.log(stu.age, stu.name, stu.sno);
- stu.running();
-
- class Student extends Person {
- constructor(name, age, title) {
- super(name, age);
- this.title = title;
- }
- }
-