每个函数都有一个 prototype 属性,就是我们经常在各种例子中看到的那个 prototype
prototype是函数才会有的属性
function Person() {}
Person.prototype.name = 'Kevin';
var person1 = new Person();
var person2 = new Person();
console.log(person1.name) // Kevin
console.log(person2.name) // Kevin
什么是原型
你可以这样理解:
- 每一个JavaScript对象(null除外)在创建的时候就会与之关联另一个对象,这个对象就是我们所说的原型,每一个对象都会从原型"继承"属性。
- 或者每一个function都有一个prototype属性,这个属性就是原型;
prototype是个对象可以添加属性和方法
原型有什么用
- 解决方法过载
-
拓展类的功能
prototype5.png
constructor
和__proto__
(实例的原型)
function Person() {};
Person.prototype.constructor===Person; //true
// 顺便学习一个ES5的方法,可以获得对象的原型
console.log(Object.getPrototypeOf(person) === Person.prototype) // true
属性的优先级
对象》构造器》原型
constructor
每个原型都有一个 constructor 属性指向关联的构造函数。
实例与原型
当读取实例的属性时,如果找不到,就会查找与对象关联的原型中的属性,如果还查不到,就去找原型的原型,一直找到最顶层为止。
function Person() {
}
Person.prototype.name = 'Kevin';
var person = new Person();
person.name = 'Daisy';
console.log(person.name) // Daisy
delete person.name;
console.log(person.name) // Kevin