原型 原型链继承

每个函数都有一个 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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容