一、创建对象的方式
(1) new Object来创建对象
定义属性 通过对象.属性名=属性值
let obj = new Object();
obj.name = "奥特曼"
obj.age = 20
console.log(obj);
console.log(obj.name);
(2) 字面量形式创建对象
拿到的是同样的结果 简化了new Object 的步骤,定义属性方式:键值对
let obj = {
name: '奥特曼',
age: 20
}
(3) 通过构造函数的方式创建对象
构造函数和普通的函数没什么两样,但是构造函数是专门用来创建对象的,如果一个函数使用了new 关键字创建对象,那么这个函数就是构造函数。
这时候有个疑问点了,和普通函数没什么区别,我们怎么来区分它是构造函数呢?
特点
我们规定通常定义构造函数的时候,构造函数的首字母大写
使用了new 关键字调用
function Student() {
this.name = '123'
}
let stu1 = new Student();
console.log(stu1);
通过上面代码来看 我们定义属性是通过this.属性名=属性值 ,这和上面两种就有点奇怪了,为什么使用this,这里的this啊是指向创建对象的调用者 谁创建了对象 我就往谁里多一个属性,当然每创建了一个对象 就会开辟一个新的空间
如果还不懂为什么使用this定义属性的话 我们来打印一下构造函数中的this 就懂了
function Student() {
this.name = '123'
console.log(this);
}
let stu1 = new Student(); //创建构造函数对象
console.log(stu1); // 输出stu就可以拿到里面的this
构造函数里的的this就是指的创建后的实例对象 为其动态添加属性和方法
对于上面的name 有时候不会写死 所以我们就要进行下一步优化
function Student(name) {
this.name = name
}
let stu1 = new Student('奥特曼');
成员
实例成员: 实例成员就是构造函数内部通过this添加的成员 ,只允许实例化对象访问
静态成员: 静态成员就是 构造函数上添加的成员 只允许过构造函数本身进行访问
否则拿到的是undefined
使用场景:
录入学生信息
var stu1 = { name: '泰罗', age: 10, gender: '男' class:'三年级' };
var stu2 = { name: '雷欧', age: 18, gender: '男' class:'三年级' };
var stu3 = { name: '杰克', age: 19, gender: '男' class:'三年级' };
var stu4 = { name: '迪迦', age: 20, gender: '男' class:'三年级' };
如果说字面量形式书写 写了很多无用的代码 name age gender class 这时候构造函数的作用就来了
function Student() {
this.name = name
this.age = age
this.gender = gender
this.class = '三年级' // 由于都是三年级 我们可以写死
}
let stu1 = new Student('泰罗', '10', '男')
let stu2 = new Student('雷欧', '18', '男')
let stu3 = new Student('泰罗', '19', '男')
let stu4 = new Student('泰罗', '20', '男')
虽然看起来代码比较多但是省去了很多无用的代码,最主要的是放到任何js文件里都可以复用