构造函数 私有的
- 构造函数首字母大写
- 函数内部创建对象
function CreatCar(carName, catAge) {
this.carName = carName;
this.catAge = catAge;
}
构造函数原型 公有的
- 构造函数默认有一个原型对象 可以使用.prototype获取
- 该对象下的所有属性和方法就是 构造函数创建出来的所有对象的 共有属性和方法
- 但是创建出来的共有属性或方法 对象的 prototype内显示
- 构造函数名.prototype.属性/方法=属性值/function
CreatCar.prototype.say = function() {
console.log('汪汪');
}
new都干了些什么
- 创建空对象{}存在内存中
- 将函数内的 this 指向这个新创建的对象
- 给对象添加属性
- 将新对象的_proto_属性指向函数的prototype
- 如果没有设置返回这个对象,会自动返回
构造函数原型执行问题
- 例如: cat.say = xxx 这句话想点关于给cat单独创建一个私有的say 属性或 方法
- 当一个对象访问某属性或方法的时候查找的顺序是 私有的---->共有的
- 当私有和公有同时出现相同的属性的时候私有的优先级高
function CreatCar(carName, catAge) {
this.carName = carName;
this.catAge = catAge;
};
CreatCar.prototype.say = function() {
console.log('喵喵喵');
}
var cat = new CreatCar('小白', '3');
var cat1 = new CreatCar('小花', '4');
cat.say = function() {
console.log("喵喵1");
};
cat.say()
cat1.say()
函数
- 函数拥有原型对象,但是只有构造函数有用
- 我们称 new+ 构造函数创建出来的对象叫做实例化对象
- 实例化对象下有一个__proto__属性 该属性指的是 构造函数的原型对象()
- 构造函数的原型对象下默认只有一个 constructor属性,该属性指的是构造函数本身