创建对象的方法
- 对象字面量
- new Object()
- 自定义构造函数
构造函数
构造函数是一种特殊的函数,主要用来初始化对象,即为对象成员变量赋初始值,它总与 new 一起使用。我们可以把对象中一些公共的属性和方法抽取出来,然后封装到这个函数里面。
在 JS 中,使用构造函数时要注意以下两点:
构造函数用于创建某一类对象,其首字母要大写
构造函数要和 new 一起使用才有意义
new的执行
new 在执行时会做四件事情:
- 在内存中创建一个新的空对象。
- 让 this 指向这个新的对象。
- 执行构造函数里面的代码,给这个新对象添加属性和方法。
- 返回这个新对象(所以构造函数里面不需要 return )
例子:
function Start(){
this.name="123"
this.age=18
}
let st=new Start()
console.log(st.age);
静态成员和实例成员
JavaScript 的构造函数中可以添加一些成员,可以在构造函数本身上添加,也可以在构造函数内部的 this 上添加。通过这两种方式添加的成员,就分别称为静态成员和实例成员。
- 静态成员:在构造函数本上添加的成员称为静态成员,只能由构造函数本身来访问
- 实例成员:在构造函数内部创建的对象成员称为实例成员,只能由实例化的对象来访问
例子:
function Start(){
this.name="123"
this.age=18
}
let st=new Start()
Start.hobby="run"
console.log(Start.hobby);
console.log(st.hobby);
包括添加在原型链上的属性也需要由实例去访问
Start.prototype={
hobby:"run"
}
console.log(st.hobby);
ES6的构造函数
类constructor构造函数
constructor() 方法是类的构造函数(默认方法),用于传递参数,返回实例对象,通过 new 命令生成对象实例时,自动调用该方法。如果没有显示定义, 类内部会自动给我们创建一个constructor()
示例代码
class Person {
constructor(name, age, sex) {
this.name = name
this.age = age
this.sex = sex
}
say() {
console.log(this.name + "==" + this.age + "==" + this.sex);
}
}
let p = new Person("ZYY", 18, "BOY")
p.say()
ES6类的继承
class Student extends Person {
constructor(name, age, sex, id) {
super(name, age, sex);//继承父类的构造函数,记得传入对应的参数
this.id = id
}
sayFather() {
super.say();//super可以调用父类的方法
}
say() {
console.log(this.name + "==" + this.age + "==" + this.sex + "==" + this.id);
}
}
let s = new Student("XDX", 20, "GIRL", 12)
s.say()
s.sayFather()