返回
JS类、new、prototype与__proto__ 揭秘篇
前端
2023-10-23 15:23:48
JS 语言中的类
在JS中,类是对JS中对象的分类。
JS中,类型有:数字、字符串、布尔、符号Symbol、null、undefined、对象。
一定,要区分开!!!!!!!
类型是对JS中数据的分类,类是对JS中对象的分类。
关于对象:
- 变量就是用来引用对象的;
- 对象是无序属性的集合;
- 对象的每一个属性都由一个键名和一个键值组成;
- 对象的属性是动态的,可以随时添加或删除。
创建对象有两种方法
-
- 直接写字面量的方式创建对象
-
- 使用 new + 构造函数的方式创建对象
1.直接写字面量的方式创建对象
const person = {
name: "xiaoming",
age: 18,
sex: "male"
};
2.使用 new + 构造函数的方式创建对象
function Person(name, age, sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
const person = new Person("xiaoming", 18, "male");
JS中类与对象的联系与区别
JS中,类是用来创建对象的,对象是类的实例。
类与对象的联系:
- 类是对象的模板;
- 对象是类的具体表现形式。
类与对象的区别: - 类是抽象的,对象是具体的;
- 类只能用来创建对象,对象不能用来创建类。
类与函数之间的关系
JS中,类是特殊函数。
class Person {
constructor(name, age, sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
}
上例,将类 Person 理解成特殊的函数:
function Person(name, age, sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
类的原型对象
每个类都有一个prototype属性,prototype属性指向类的原型对象。
类的原型对象是一个普通的JS对象,它包含了类的共有属性和方法。
class Person {
constructor(name, age, sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
}
console.log(Person.prototype);
输出:
{constructor: ƒ, __defineGetter__: ƒ, __defineSetter__: ƒ, hasOwnProperty: ƒ, __lookupGetter__: ƒ, __lookupSetter__: ƒ, isPrototypeOf: ƒ, propertyIsEnumerable: ƒ, toString: ƒ, valueOf: ƒ, …}
proto
每个对象都有一个__proto__属性,__proto__属性指向对象的原型对象。
对象的原型对象是一个普通的JS对象,它包含了对象的共有属性和方法。
const person = new Person("xiaoming", 18, "male");
console.log(person.__proto__);
输出:
{constructor: ƒ, __defineGetter__: ƒ, __defineSetter__: ƒ, hasOwnProperty: ƒ, __lookupGetter__: ƒ, __lookupSetter__: ƒ, isPrototypeOf: ƒ, propertyIsEnumerable: ƒ, toString: ƒ, valueOf: ƒ, …}
类的继承
JS中,类可以继承其他类,继承是指子类可以访问父类的属性和方法。
class Father {
constructor(name, age) {
this.name = name;
this.age = age;
}
sayHello() {
console.log("Hello, I'm " + this.name + ", I'm " + this.age + " years old.");
}
}
class Son extends Father {
constructor(name, age, school) {
super(name, age);
this.school = school;
}
sayHello() {
super.sayHello();
console.log("I'm from " + this.school + ".");
}
}
const son = new Son("xiaoming", 18, "Tsinghua University");
son.sayHello();
输出:
Hello, I'm xiaoming, I'm 18 years old.
I'm from Tsinghua University.
总结
JS中,类是用来创建对象的,对象是类的实例。
类与对象的关系是,类是对象的模板,对象是类的具体表现形式。
类的原型对象是一个普通的JS对象,它包含了类的共有属性和方法。
对象的__proto__属性指向对象的原型对象。
JS中,类可以继承其他类,继承是指子类可以访问父类的属性和方法。