引入:
- 面向对象编程:找到可以解决问题的对象,调用其功能解决问题
- 面向过程编程:按照步骤一步一步解决问题
工厂函数:
function createPerson(name,age){
let person={name,age}
return person
}
构造函数:在一定程度上可以看做对象的模板
- 函数名就是对象类型名,首字母大写
- 构造函数中,this关键字只定义属性和方法
- 通过new语句,调用构造函数创建对象
检查数据类型:
对象类型: instanceof obj ====>object
基本数据类型:使用typeof来检测
对象类型:
- 实例对象==>通过new语句调用构造函数来创建==>let p1=new Person(); ==>p1为引用变量
- 原型对象
- 函数对象
原型对象 ==> 实例.__proto__===构造函数名.prototype
- js规定,每个构造函数都有一个prototype属性,指向它的原型对象
- 在原型对象上定义的属性和方法可以被所有构造函数对应的实例所访问
<script>
//手机类
function Phone(color, type) {
this.color = color
this.type = type
//打电话
this.callPhone = function () {
console.log('构造函数 >>>',this.color + this.type + '的手机打电话')
}
}
//在Phone的原型对象上定义一个sendMessage的方法
Phone.prototype.sendMessage = function () {
console.log('发短信');
}
Phone.prototype.size = '16寸'
Phone.prototype.callPhone = function(){
console.log('原型对象 >>>>',this.color + this.type + '的手机打电话')
}
//创建手机对象
let phone1 = new Phone('白色', 'iphone13-10012')
let phone2 = new Phone('黑色', '华为-s1009')
// phone1.sendMessage()
// console.log( phone1.size );
phone1.callPhone()
phone2.callPhone()
console.dir(Phone.prototype); //原型对象
console.dir(phone1);
console.dir(phone2);
//[[Prototype]] <==> __proto__
console.log( phone1.__proto__ === Phone.prototype );
</script>
原型对象的优点:定义一些公共属性和方法,供实例对象来使用,节约内存空间。