构造函数
在JavaScript中,构造函数是给对象添加属性,初始化属性用的。
构造函数的结构
function Person(name, age){
this.name = name;
this.age = age;
}
传统构造函数所带来的问题
实例化两个person对象,在Person对象中具备属性和方法,每创建一个对象,函数都会被重新创建一次,这样就造成了内存的浪费. 并且呢 每个对象都拥有一个独立的 功能相同的方法.
实例化:通过构造函数创建对象的过程 称之为实例化
(1)神秘对象与构造函数
- 神秘对象就是构造函数的 “原型属性”
- 简称原型 (构造函数的原型)
(2)神秘对象与构造函数所创建出来的对象
- 神秘对象针对构造函数创建出来的对象称为 “原型对象”
- 简称原型 (对象的原型)
注意事项
使用对象访问属性的时候,如果在本身内找不到就会去原型中找
但是 使用 点 语法 进行属性赋值的时候,并不会去原型中进行查找
使用点语法赋值的时候,如果对象中不存在该属性,就会给该对象新增该属性,而不会去修改原型中的
原型的使用
利用对象的动态属性给原型对象添加成员
Eg:
function Person(name,age,gender){
this.name=name;
this.age=age;
this.gender=gender;
}
Person.prototype.func=function(){
console.log('somthing');
}
var p=new Person('Mark',23,'woman');
p.func();
直接替换原型对象
Eg:
`function Person(name,age,gender){
this.name=name;
this.age=age;
this.gender=gender;
}
Person.prototype={ // 核心
msg:‘你是我的眼’
};
var p=new Person(‘张三’,12,‘man’);
console.log(p.msg);
直接替换原型会出现问题
Person.prototype.sayHello=function(){
console.log(‘Nice to meet you’);
}
var p=new Person(‘谢顶’,23,‘man’);
p.sayHello();
Person.prototype={ // 核心 替换原型
msg:‘你是我的眼’
};
var p1=new Person(‘刘能’,34,‘male’);
console.log(p1.msg);
p1.sayHello();// 不可以打印出结果
p.sayHello(); // 可以打印出结果
两次原型 并不是同一个 原型对象`