###原型模式
//原型模式
function Person() {}
Person.prototype.name = "Nicholase"
Person.prototype.age = 18
Person.prototype.job = "Software Engineer"
Person.prototype.sayName = function() {
console.log(this.name);
}
let p1 = new Person();
p1.sayName();
let p2 = new Person();
p2.sayName();
console.log(p1.sayName == p2.sayName) //true
// 正常的原型链都会终止与object的原型对象
// Object的原型的原型是null
console.log(Person.prototype.__proto__ === Object.prototype) //true
console.log(Person.prototype.__proto__.constructor === Object) //true
console.log(Person.prototype.__proto__.__proto__ === null) //true
//对象通过__proto__链接到原型对象,它实际上指向prototype
console.log(p1.__proto__ === Person.prototype) //true
console.log(p1.__proto__.constructor === Person) //true
1、理解原型
- 无论何时只要创建一个函数,就会按照特定的规则为这个函数创建一个prototype属性(指向原型对象)。默认情况下所有原型对象自动获得一个名叫constructor属性,指回与之相关联的构造函数
- 在自定义构造函数的时候,原型对象默认只会获得constructor属性,其他的所有方法都继承object
2、原型的层级
- 再通过对方访问属性时,会按照这个属性的名称开始搜索。
- 首先、搜索对象实例的本身
- 如果发现则返回,该名称所对应的值,否则,会搜索会沿着原型指针进入原型对象
- 只要给对象实例添加一个属性,这个属性就会屏蔽原型对象上的同名属性
- 删除了对象实例的属性,就会招原型对象的属性
function Person() {}
Person.prototype.name = "Nicholas";
Person.prototype.age = 29;
Person.prototype.job = "Software Engineer";
Person.prototype.sayName = function() {
console.log(this.name);
}
let person1 = new Person();
let person2 = new Person();
person1.name = "Greg";
console.log(person1.name); //Greg
console.log(person2.name); //Nicholas
delete person1.name;
console.log(person1.name); //Nicholas