参考文章:原型与原型链
1.类是面向对象语言实现信息封装的基础,类的实例称为对象
2.JavaScript这门语言中没有类的概念,JS的继承不是基于类的而是基于原型的继承。ES6的class其内部是基于原型实现的继承。
3.JS摒弃类而使用原型作为实现继承的基础,是因为在JS中基于原型的继承相比基于类的继承更简单。因为类的存在是为了实例化对象,而JS可以直接通过对象字面量语法轻松的创建对象,所以就用不着转个弯去通过类来创建对象。
4.每个函数都有prototype
属性[显式原型]。它指向的是一个对象,可以在这个对象上加各种方法,然后通过这个函数new出来的对象上就可以直接使用这些方法了,还可以通过__proto__
属性看到构造函数上的prototype属性上添加的所有方法。
5.每个对象上都有__proto__
属性[隐式原型],指向了创建该对象的构造函数的显式原型。
6.当你想要使用一个对象的某个功能时:如果该对象本身具有这个功能,则直接使用;如果该对象本身没有这个的功能则去__proto__
中找。
7.定义了一个函数,它会自动创建一个prototype
指针属性。而这个被指向的原型对象自动获得了一个constructor构造函数。一个函数的原型对象的构造函数是这个函数本身。
8.显示原型prototype
,是用来实现基于原型的继承与属性的共享的。
隐式原型__proto__
,构成原型链,同样用于实现基于原型的继承。
9.使用new操作符时,生成的实例对象就拥有了__proto__
属性,并且链接到构造函数的原型上。
网友评论