Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

javaScript-原型和原型链 #1

Open
dark9wesley opened this issue Feb 5, 2021 · 0 comments
Open

javaScript-原型和原型链 #1

dark9wesley opened this issue Feb 5, 2021 · 0 comments

Comments

@dark9wesley
Copy link
Owner

dark9wesley commented Feb 5, 2021

前言

在面向对象语言中,可以通过类来抽象多个实例的公共属性和方法,基于类可以创建多个对象,以达到封装,继承,多态的目的。
在JS中没有类的概念,为了能够实现面向对象语言的特性(封装,继承,多态),需要有一个地方来存放公共的属性和方法,这个地方就是原型对象。

prototype

在JavaScript中,每个函数都有一个prototype属性,这个属性指向一个对象。这个对象就是该函数作为构造函数时,创建的实例的原型对象。

proto

如同函数都有一个prototype属性指向它创建的实例的原型一样。实例对象有一个__proto__属性指向原型对象。

constructor

在原型中也有一个属性指回它的构造函数,这个属性就是constructor 。
注意:原型中没有指向实例对象的属性,因为可能有多个实例对象共享一个原型。

以上的关系可以用一张图来做概括:

原型链

因为在JavaScript中,一起皆是对象,且每个对象都会关联一个原型,并从原型中继承属性和方法。

因为原型也是一个对象,所以它也遵循以上这个原则,它也有相关联的原型,简单来说就是原型也有自己的原型。

这样多个原型对象连接起来的链条,我们称之为原型链。

可以通过一张图来解释这种关系:

图中这条由__proto__链接起来的蓝色线就是原型链,连接起多个原型,对象通过原型链来查找属性和方法。

此外,要注意的是,原型链的尽头是Object.prototype,当然Object.prototype也有__proto__,但值为null,也就是此路不通。

对象属性和方法的查找过程

当要访问一个对象中的某个属性或时,如果对象本身中没有,就会去它的原型中找。
如果原型中也没有,就会去原型的原型中找,一直找到最顶层的原型(Object.prototype),如果还找不到,就会返回undefined。

参考

JavaScript深入之从原型到原型链

@dark9wesley dark9wesley changed the title javaScript原型及原型链 javaScript深入了解原型及原型链 Feb 5, 2021
@dark9wesley dark9wesley changed the title javaScript深入了解原型及原型链 javaScript-原型和原型链 Feb 5, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant