当前位置: 首页>编程语言>正文

es6 对象key 变量 es6的对象

1. 对象

再JavaScript中,对象是一组无序相关属性和方法的集合,所有事物都是对象,例如,字符串、数值、数组、函数等。

对象是由属性和方法组成的:

  1. 属性:事物的特征,在对象中用属性来表示(常用名词)
  2. 方法:事物的行为,在对象中用方法来表示(常用动词)

2. 类

在ES6中新增了类的概念,可以使用class关键字声明一个类,之后这个类来实例化对象。

  • 类抽象了对象的公共部分,它泛指某一大类
  • 对象特指某一个,通过类实例化一个具体的对象。

3. 面向对象的思维特点:

  1. 抽取(抽象)对象共用的属性和行为组织(封装)成一个类(模板)
  2. 对类进行实例化,获取类的对象

4. 创建类和对象

<script>
        //1. 创建类 class
        class Star {
            constructor(uname, age) {
                this.uname = unanme;
                this.age = age;
            }
        }
        //2. 利用类创建对象 new
        var ldh = new Star('liudehua', 20);
    </script>

注意:

  • 通过class 关键字创建类,类名习惯性定义首字母大写
  • 类里面有个constructor函数,可以接受传递过来的参数,同时返回实例对象
  • constructor 函数 只要 new生成实例时,就会自动调用这个函数,如果我们不写这个函数,类也会自动生成这个函数
  • 生成实例 new 不能省略
  • 最后注意语法规范 创建类,类名后面不要加小括号,生成实例 类名后面加小括号,构造函数不需要加function

5. 类中添加方法

<script>
        //1. 创建类 class
        class Star {
            constructor(uname, age) {
                this.uname = unanme;
                this.age = age;
            }
            //类中添加方法
            sing(song) {
                console.log(this.uname + song);
            }
        }
        //2. 利用类创建对象 new
        var ldh = new Star('liudehua', 20);      
        ldh.sing("冰雨");
    </script>

注意:

  • 类里面的所有函数不需要写 function
  • 多个函数方法之间不需要添加逗号分隔

7. 类的继承

  • 关键字 extends,可以使子类继承父类的属性和方法
class Father {
            constructor() {

            }
            mony() {
                console.log(1000);
            }
        }
        class Son extends Father {

        }
        var son = new Son();
        son.mony();
  • 关键字 super,调用父类中的函数(可以是普通函数也可以是构造函数)。父类里函数使用的参数必须是父类constructor里的参数,在子类constructor使用super关键字,将子类constructor参数传递给父类,子类继承使用父类里面的方法就不会存在数据问题了。
class Father {
            constructor(x, y) {
                this.x = x;
                this.y = y;
            }
            sum() {
                console.log(this.x + this.y);
            }
        }
        class Son extends Father {
            constructor(x, y) {
                super(x, y); //调用了父类中的构造函数
            }
        }
        var son = new Son(1, 2);
        son.sum();

8. surper关键字

  • surper 关键字调用父类普通函数
class Father {
            say() {
                return '我是爸爸'
            }
        }
        class Son extends Father {
            say() {
                // console.log('我是儿子');
                console.log(super.say() + '的儿子');
                // super.say() 就是调用父类中的普通函数 say()
            }
        }
        var son = new Son();  
        son.say();
        // 继承中属性或者方法查找原则:就近原则
        // 1. 继承中 ,如果实例化子类输出一个方法,先看子类有没有这个方法,如果有就先执行这个子类的
        // 2. 继承中,如果子类中没有,就去查找父类有没有这个方法,如果有就执行父类的这个方法
  • 子类继承父类的属性方法同时也扩展自己的属性和方法。
class Father {
            constructor(x) {
                this.x = x;
            }
        }
        class Son extends Father {
            constructor(x, y) {
                surper(x); //调用父类的constructor(x)
                this.y = y;//定义子类独有的属性
            }
        }

注意:

  • 子类在构造函数中使用surper,必须放到this前面(即必须先调用父类的构造方法,在使用子类的构造方法)

9. 使用类的注意事项

  • 在ES6中,类没有变量提升,所以必须先定义类,才能通过类实例化对象
  • 类里面的共有属性和方法一定要加this使用
  • this的指向问题
<body>
    <button>点击</button>
    <script>
        var that;
        var _that;
        class Star {
            // constructor 里面的this 指向的是创建的实例对象
            constructor(uname, age) {
                that = this;
                this.uname = uname;
                this.age = age;
                this.btn = document.querySelector('button');
                this.btn.onclick = this.sing;
            }
            sing() {
                //这个sing方法里面的this 指向的是btn这个按钮,因为这个按钮调用了这个函数
                console.log(this);
                //console.log(this.uname); //undefined this 此时指向了 btn 
                console.log(that.uname); //that = this that全局变量,指向之前this指向实例化对象
            }
            dance() {
                // 谁调用方法便指向谁,实例化对象ldh调用了方法,便指向ldh
                _that = this;
                console.log(this);
            }
        }
        var ldh = new Star('刘德华');
        console.log(that === ldh); //true
        ldh.dance();
        console.log(_that === ldh); //true
    </script>



https://www.xamrdz.com/lan/5w51921766.html

相关文章: