1、构造函数
面对对象编程的特性:比如封装性、继承性等,可以借助于构造函数来实现,但是会存在浪费内存的问题
<script>
// 构造函数函数名一般习惯以大写字母开头
// this指向的实例对象
function Person(x, y) {
this.uname = x,
this.age = y,
this.sing = function() {
console.log('我会唱歌');
}
}
// obj为实例对象,获得了构造函数中封装的所有逻辑
const obj = new Person('张三', 20)
console.log(obj); //Person {uname: '张三', age: 20, sing: ƒ}
const obj2 = new Person('李四', 25)
console.log(obj.sing === obj2.sing) //false 实例对象之前彼此独立、互不影响
</script>
2、原型prototype
每一个构造函数都有一个prototype属性,指向另一个对象,我们也称之为原型对象,这个对象可以挂载函数,我们可以直接把那些不变的方法,直接定义在prototype对象上,这样所有对象的实例就可以共享这些方法
<script>
function Person(x, y) {
this.uname = x,
this.age = y
}