JavaScript 原型,原型链? 有什么特点?js 获取原型的方法?

JavaScript 原型,原型链? 有什么特点?js 获取原型的方法?


JavaScript 原型,原型链? 有什么特点?

原型

  • 在js中,我们通常会使用构造函数来创建一个对象,每一个构造函数的内部都有一个prototype属性,这个属性对应的值是一个对象,这个对象它包含了可以由该构造函数的所有实例都共享的属性和方法,我们把它称为原型。

  • 原型分为显示原型和隐式原型,一般称prototype为显示原型,__proto__称为隐式原型。
    一般而言,__proto__这个指针我们应该获取这个值,但是浏览器中都实现了__proto__属性来让我们访问这个属性,但是我们最好不要使用这个属性,因为它不是规范中规定的。
    ES5 中新增了一个 Object.getPrototypeOf() 方法,我们可以通过这个方法来获取对象的原型。

举个例子:

  • 为什么我们新建的对象可以使用toString()方法,这是因为我们访问一个对象的属性时,首先会在这个对象身上找,如果没有的话,我们会通过这个对象的__proto__找到该对象的原型,然后在这个原型对象中找,这个原型对象又没有的话,就这样子通过一直找下去,这也就是原型链概念。直到找到原型链的尽头也就是Object.prototype。

原型链

原型链

当我们访问一个对象的属性时,如果这个对象内部不存在这个属性,那么它就会去它的原型对象里找这个属性,这个原型对象又会有自己的原型,于是就这样一直找下去,也就是原型链的概念。原型链的尽头一般来说都是 Object.prototype 所以这就是我们新建的对象为什么能够使用 toString() 等方法的原因。

特点:

JavaScript 对象是通过引用来传递的,我们创建的每个新对象实体中并没有一份属于自己的原型副本。当我们修改原型时,与之相关的对象也会继承这一改变。

js 获取原型的方法?

  1. p.__proto__
  2. p.constructor.prototype
  3. Object.getPrototypeOf(p)

在 js 中不同进制数字的表示方式

以 0X、0x 开头的表示为十六进制。

以 0、0O、0o 开头的表示为八进制。

以 0B、0b 开头的表示为二进制格式。