美文网首页
72-ES6类和对象

72-ES6类和对象

作者: 仰望_IT | 来源:发表于2019-04-27 16:47 被阅读0次
  • 1. 在ES6之前如何定义一个类?

    • 通过构造函数来定义一个类

          function Person(myName, myAge) {
              // 实例属性
              // this.name = "lnj";
              // this.age = 34;
              this.name = myName;
              this.age = myAge;
              // 实例方法
              this.say = function () {
                  console.log(this.name, this.age);
              }
      
              // 静态属性
              Person.num = 666;
              // 静态方法
              Person.run = function () {
                  console.log("run");
              }
          }
          // let p = new Person();
          // p.say(); // lnj 34
          let p = new Person("zs", 18);
          p.say();    // zs 18
          console.log(Person.num);
          Person.run();   // run
      

  • 2. 在ES6开始如何定义一个类?

    • 从ES6开始系统提供了一个名称叫做 class 的关键字, 这个关键字就是专门用于定义类的

          class Person{
              // 当我们通过new创建对象的时候, 系统会自动调用constructor
              constructor(myName, myAge){ // 构造方法
                  this.name = myName;
                  this.age = myAge;
              }
              // 实例属性
              // name = "lnj";
              // age = 34;
              // 实例方法
              say(){
                  console.log(this.name, this.age);
              }
      
              // 静态属性
              static num = 666;
              // 静态方法
              static run() {
                  console.log("run");
              }
          }
          // let p = new Person();
          // p.say(); // lnj 34
          let p = new Person("zs", 18);
          p.say();    // zs 18
          // console.log(Person.num);
          // Person.run();   // run
      

  • 3. 类和对象注意点

  • 注意点1: 在ES6标准中添加实例属性都需要在constructor中添加
          class Person{
              // 注意点1:以下定义"实例属性"的方式并不是ES6正版标准中的写法, 大部分浏览器不支持
              // 在ES6标准中添加实例属性都需要在constructor中添加
              // 实例属性
              // name = "lnj";
              // age = 34;
              constructor(){
                  this.name = "lnj";
                  this.age = 34;
              }
          let p = new Person();
          console.log(p);  // Person {name: "lnj", age: 34}
    
  • 注意点2: 在ES6标准中static只支持定义静态方法不支持定义静态变量
          class Person{
              // 注意点2: 以下定义"静态属性"的方式并不是ES6正式版标准中的写法, 大部分的浏览器不支持
              // 在ES标准中static只支持定义静态方法不支持定义静态变量
              // 静态属性
              // static num = 666;    // 这样定义静态属性在有些浏览器中会报错
    
              // 静态方法
              static run(){
                  console.log("run");
              }
          }
          // 必须通过外部动态添加静态属性
          Person.num = 666;
    
          let p = new Person();
          console.log(p);  // Person {}
    
  • 注意点3: 在ES6中如果想给实例对象添加实例方法, 那么必须将实例方法写到constructor构造方法中
          class Person{
              constructor(myName, myAge){ // 这里的代码相当于ES6之前在构造函数中的代码
                  this.name = myName;
                  this.age = myAge;
                  // 实例方法
                  this.hi = function () {
                      console.log("hi");
                  }
              }
              // 在这里写方法会默认保存到原型对象中
              say(){  // 这里的代码相当于ES6之前给原型对象添加的代码
                  console.log("say");
              }
          }
          let p = new Person("lnj", 34);
          console.log(p);  // Person {name: "lnj", age: 34, hi: ƒ}
    

  • 4. 如何在原型对象中保存属性和方法

    • 在ES6之前如何在原型对象中保存属性和方法
        1. 动态的给原型对象添加属性和方法
          function Person(myName, myAge) {
              // 实例属性
              this.name = myName;
              this.age = myAge;
              // 实例方法
              this.hi = function () {
                  console.log("hi");
              }
          }
        
          // 动态的给原型对象添加属性和方法
          Person.prototype.type = "人";
          Person.prototype.say = function () {
              console.log(this.name, this.age);
          }
        
        
          let p = new Person("lnj", 34);
          console.log(Person.prototype);  // {constructor: ƒ, type: "人", say: ƒ}
        
        1. 自定义原型对象
          function Person(myName, myAge) {
              // 实例属性
              this.name = myName;
              this.age = myAge;
              // 实例方法
              this.hi = function () {
                  console.log("hi");
              }
          }
        
          // 2.自定义原型对象
          Person.prototype = {
              constructor: Person,
              type: "人",
              say: function () {
                  console.log(this.name, this.age);
              }
          }
        
          let p = new Person("lnj", 34);
           console.log(Person.prototype);  // {constructor: ƒ, type: "人", say: ƒ}
        
    • 在ES6开始如何在原型对象中保存属性和方法
        1. 动态的给原型对象添加属性和方法
          class Person{
              constructor(myName, myAge){
                  this.name = myName;
                  this.age = myAge;
                  this.hi = function () {
                      console.log("hi");
                  }
              }
          }
          // 1.动态的给原型对象添加属性和方法
          Person.prototype.type = "人";
          Person.prototype.say = function () {
              console.log(this.name, this.age);
          }
        
          let p = new Person("lnj", 34);
           console.log(Person.prototype);  // {constructor: ƒ, type: "人", say: ƒ}
        
      • ES6中如果是通过class创建的类, 不能自定义原型对象

          class Person{
              constructor(myName, myAge){
                  this.name = myName;
                  this.age = myAge;
                  this.hi = function () {
                      console.log("hi");
                  }
              }
          }
          // 2.ES6中如果是通过class创建的类, 不能自定义原型对象
          let obj = {
              constructor: Person,
              type:"人",
              say: function () {
                  console.log(this.name, this.age);
              }
          }
          Person.prototype = obj;
        
          console.log(Person.prototype);  // {constructor: ƒ}
        

相关文章

  • 72-ES6类和对象

    1. 在ES6之前如何定义一个类?通过构造函数来定义一个类 function Person(myName, ...

  • 对象、类对象和元类对象

    http://www.tuicool.com/articles/mmyuUr http://blog.csdn.n...

  • python 类和对象

    类和对象 目标 类和对象的概念 类和对象的关系 类的设计 01. 类和对象的概念 类 和 对象 是 面向对象编程的...

  • 类,类对象和实例对象

    Python 的类定义写完之后就成了一个类对象,而引用这个类对象的就是实例对象。 类中定义的属性和方法都是静态属性...

  • 面相对象-02类和对象

    类和对象 目标 ●类和对象的概念●类和对象的关系●类的设计 01.类和对象的概念 类和对象是面向对象编程的两个核心...

  • python语法入门五

    类和对象 类和对象 基础 继承:python为多继承 类、类对象和实例对象 当实例对象声明后,再删除类对象,那么该...

  • 13.Python类和对象

    目标 类和对象的概念 类和对象的关系 类的设计 01. 类和对象的概念 类 和 对象 是 面向对象编程的 两个 核...

  • 12.Python类和对象

    目标 类和对象的概念 类和对象的关系 类的设计 01. 类和对象的概念 类 和 对象 是 面向对象编程的 两个 核...

  • 类和对象 ​​​

  • 类和对象

    对象=属性+方法 self 由同一个类可以生成无数对象,当一个对象的方法被调用是,对象会将自身的引用作为第一个参数...

网友评论

      本文标题:72-ES6类和对象

      本文链接:https://www.haomeiwen.com/subject/idihnqtx.html