为什么要用构造函数
因为我们一次创建一个对象,里面很多的属性和方法是大量相同的我们只能复制
因此我们可以利用函数的方法重复这些相同的代码我们就把这个函数成为构造函数 有因为这个函数不一样,里面封装的不是普通代码,而是对象
构造函数就是把我们对象里面些相同的属性和方法抽象出来封装到函数里面
构造函数的格式
```function 构造函数名() {
this.属性 = 值
this.方法 = function () { }
}
new 构造函数名()
例子
function Star(name, age) {
this.name = name,
this.age = age
}
let zs = new Star('张三', '20')
console.log(zs);
对象和构造函数的区别
// 1.构造函数
//明星泛指的某一大类它类似于 java 语言里面的类(class)
function Star(uname, age, sex) {
this.name
= uname;
this.age = age;
this.sex = sex;
this.sing = function (sang) {
console.log(sang);
}
}
// 2.对象特指是一个具体的事物刘德华== {name: “刘德华",age: 18, sex: "男", sing: f}
var ldh = new Star('刘德华', 18, '男'); //调用函数返回的是一个对象
console.log(ldh);
//3.我们利用构造函数创建对象的过程我们也称为对象的实例化
用Es6 clsaa方法实现
class Phon {
constructor(name, age) {
this.name = name
this.age = age
}
// 方法
sing() { '我可以唱歌' }
}
let obj = new Phon('张三', '20')
console.log(obj);
console.log(obj.sing);
例子
这样写获取不到name属性,因为是在原型上挂载
function Phone() {
}
Phone.name = '手机';
Phone.change = function () {
console.log("我可以改变世界")
}
let nokia = new Phone();
console.log(nokia.name); //undefined
静态属性
class Phone {
//静态属性
static name = '手机';
static change() {
console.log("我可以改变世界");
}
}
let nokia = new Phone();
console.log(nokia.name); //undefined
console.log(Phone.name); //手机
Es5方法实现继承
// 父类
class Father {
constructor(house, car, money) {
this.house = house
this.car = car
this.money = money
}
}
// 子类
class Son extends Father {
constructor(house, car, money) {
super(house, car, money)
}
}
let s = new Son('房子', '奥迪', '一个亿')
console.log(s);