We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
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
在面向对象语言中,可以通过类来抽象多个实例的公共属性和方法,基于类可以创建多个对象,以达到封装,继承,多态的目的。 在JS中没有类的概念,为了能够实现面向对象语言的特性(封装,继承,多态),需要有一个地方来存放公共的属性和方法,这个地方就是原型对象。
在JavaScript中,每个函数都有一个prototype属性,这个属性指向一个对象。这个对象就是该函数作为构造函数时,创建的实例的原型对象。
如同函数都有一个prototype属性指向它创建的实例的原型一样。实例对象有一个__proto__属性指向原型对象。
在原型中也有一个属性指回它的构造函数,这个属性就是constructor 。 注意:原型中没有指向实例对象的属性,因为可能有多个实例对象共享一个原型。
以上的关系可以用一张图来做概括:
因为在JavaScript中,一起皆是对象,且每个对象都会关联一个原型,并从原型中继承属性和方法。
因为原型也是一个对象,所以它也遵循以上这个原则,它也有相关联的原型,简单来说就是原型也有自己的原型。
这样多个原型对象连接起来的链条,我们称之为原型链。
可以通过一张图来解释这种关系:
图中这条由__proto__链接起来的蓝色线就是原型链,连接起多个原型,对象通过原型链来查找属性和方法。
此外,要注意的是,原型链的尽头是Object.prototype,当然Object.prototype也有__proto__,但值为null,也就是此路不通。
当要访问一个对象中的某个属性或时,如果对象本身中没有,就会去它的原型中找。 如果原型中也没有,就会去原型的原型中找,一直找到最顶层的原型(Object.prototype),如果还找不到,就会返回undefined。
The text was updated successfully, but these errors were encountered:
No branches or pull requests
前言
在面向对象语言中,可以通过类来抽象多个实例的公共属性和方法,基于类可以创建多个对象,以达到封装,继承,多态的目的。
在JS中没有类的概念,为了能够实现面向对象语言的特性(封装,继承,多态),需要有一个地方来存放公共的属性和方法,这个地方就是原型对象。
prototype
在JavaScript中,每个函数都有一个prototype属性,这个属性指向一个对象。这个对象就是该函数作为构造函数时,创建的实例的原型对象。
proto
如同函数都有一个prototype属性指向它创建的实例的原型一样。实例对象有一个__proto__属性指向原型对象。
constructor
在原型中也有一个属性指回它的构造函数,这个属性就是constructor 。
注意:原型中没有指向实例对象的属性,因为可能有多个实例对象共享一个原型。
以上的关系可以用一张图来做概括:
原型链
因为在JavaScript中,一起皆是对象,且每个对象都会关联一个原型,并从原型中继承属性和方法。
因为原型也是一个对象,所以它也遵循以上这个原则,它也有相关联的原型,简单来说就是原型也有自己的原型。
这样多个原型对象连接起来的链条,我们称之为原型链。
可以通过一张图来解释这种关系:
图中这条由__proto__链接起来的蓝色线就是原型链,连接起多个原型,对象通过原型链来查找属性和方法。
此外,要注意的是,原型链的尽头是Object.prototype,当然Object.prototype也有__proto__,但值为null,也就是此路不通。
对象属性和方法的查找过程
当要访问一个对象中的某个属性或时,如果对象本身中没有,就会去它的原型中找。
如果原型中也没有,就会去原型的原型中找,一直找到最顶层的原型(Object.prototype),如果还找不到,就会返回undefined。
参考
JavaScript深入之从原型到原型链
The text was updated successfully, but these errors were encountered: