栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JavaScript类

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JavaScript类

文章目录
  • 一、简介
  • 二、类和原型
  • 三、类和构造函数
    • 1.简介
    • 2.类标识,instanceof
    • 3.constructor属性
  • 四、使用class关键字的类
    • 1.语法
    • 2.静态方法
    • 3.getter和setter方法
    • 4.公有私有和静态字段
      • (1)未来可能会标准化的class类体语法
    • 5.关于super和extend
    • 6.关于抽象类


一、简介
  1. 多个对象需要共享某些属性此时可以创建一个类,这个类就是创建对象的模板
  2. Javascript的类是基于原型继承而不是与Java一样基于类继承
二、类和原型
  1. 在Javascript中,类意味着一组对象从同一个原型继承特征。因此,原型是类的核心特征。
三、类和构造函数 1.简介
  1. 构造函数是类的外在表现,通过构造函数代表一个类。一般构造函数名就是类名
  2. 调用构造函数创建对象的关键在于构造函数的prototype属性将作为新对象的原型。
  3. 所有对象都有原型,但只有少数函数对象有prototype属性。这意味着使用同一个构造函数创建的对象都有相同的原型,所有它们是同一个类的实例。
  let arr = [];
  let obj = {};
  let fun = function () { };
  console.log(arr.prototype);//undefined
  console.log(obj.prototype);//undefined
  console.log(fun.prototype);//{constructor: ƒ}
2.类标识,instanceof
  1. 类标识:原型就是类标识,而不是构造函数。
  2. instanceof检查对象是否为某个原型的实例,而不是检查是否是通过某个构造函数创建的这个对象
  function Fun() { };

  let f = new Fun();

  console.log(f instanceof Fun);//这里检查的是f对象是否是Fun的prototype属性的实例,而不是检查f是否是通过Fun()创建的。

3.constructor属性
  1. 每一个函数都有一个prototype属性,这个属性值就是原型对象,而这个原型对象有一个constructor属性,这个属性就是当前的这个函数,可以通过这个特征进行反向引用
  let F = function () { };

  let p = F.prototype;

  let c = p.constructor;

  console.log(c === F);//true
--------------------------------------
  let o = new F();

  console.log(o.constructor === F);//true

四、使用class关键字的类 1.语法
  1. 工作原理与’三’完全一样,只不过语法更有面向对象的风格
  class Student {
  
    constructor(para) {
      this.para = para;
    }

    eat() {
      console.log('吃饭');
    }
  }

  let student = new Student("text");

  student.eat();//吃饭
  student.para//text
  

2.静态方法
  1. 使用static关键字来修饰方法
class Student{
	static eat(){};//这是静态方法
}
//类名加方法名调用:Student.eat();
3.getter和setter方法
  class Person {
    constructor(arg) { this.arg = arg; }
    getArg() { return this.arg; }
    setArg(arg) { this.arg = arg }
  }
  const person = new Person('text');
  person.arg	//=> text
  person.getArg() //=> text
  // 如果属性不私有化,其实写set和get方法根本没有意义
4.公有私有和静态字段 (1)未来可能会标准化的class类体语法

注释:ES6不允许创建类的属性,只允许创建方法。如果需要定义属性,则需要在构造函数中创建。

  1. 但是新语法支持定义属性,不过还没有标准化。
//公有字段
  class Person {
    name;
    gender;
    constructor(name, gender) {
      this.name = name;
      this.gender = gender;
    }
  }
  
  const person = new Person("marry", "woman");
  console.log(person.name);//marry
  
//私有字段,这里的#相当于Java的private
 class Person {
    #name = "";
    #gender = "";
    constructor(name, gender) {
      this.#name = name;
      this.#gender = gender;
    }
    getName() { return this.#name }
  }

  const person = new Person("marry", "woman");
  person.getName();//marry
  
//静态字段
class Person{
	static i = 10;//类体中,方法体之外定义静态变量
}

5.关于super和extend

解释:与Java一致,不再描述。

6.关于抽象类

解释:略

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/434795.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号