`

了解javascript中的prototype与 __proto__

 
阅读更多

我们先来看一个函数。

function person() {

 

}

这个函数我们使用chrome观察其运行情况,可以看到Person有两个属性,一个是prototype,一个是__proto__

。其中prototype是每个函数(只有函数才有这个属性)的属性。而__proto__是js对象的属性,即只要是js对象,都有这个属性。比如

var arr = [],var obj = {}等等,都有__proto__。

如下图所示:



 

那prototype有什么作用呢?

  new 关键字和Person构造器创建的所有的对象都共享prototype上的属性。比如

function person() {

 

}

person.prototype.name='共享名称';

var p = new Person();

var p1 = new Person();

p.name === p1.name //值为true。

这正是原型的意义所在。

那__proto__有什么用呢?

我们继续使用上面的代码做说明:

如果我们调用p.age,那么js就会在p1对象上查找age变量是否存在,如果p对象上不存在该属性,js就会在

p.__proto__属性指向的Person.prototype(p.__proto__===Person.prototype //值为true)上查找,如果Person.prototype上找不到属性,js就会在Person.prototype.__prototype__属性指向的Object.prototype属性上查找。如果该属性上也查找不到,那么p.age值就会为undefined。

通过这个例子应该清楚了__protype__的作用了:正是__prototype__构成了原型链。上面所面试的原型的指向是否正确,可以通过下图得到验证:



 

 

 

  • 大小: 26.6 KB
  • 大小: 55.6 KB
分享到:
评论

相关推荐

    prototype,__proto,constructor

    分析javascript中 prototype __proto__ constructor之间的关系

    Javascript中prototype与__proto__的关系详解

    主要给大家介绍了关于Javascript中prototype与__proto__的关系的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。

    详解帮你彻底搞懂JS中的prototype、__proto__与constructor(图解)

    JavaScript中的`prototype`、`__proto__`和`constructor`是理解JavaScript面向对象编程的关键概念。这篇文章通过图解的方式深入浅出地解析了这三个概念之间的关系。 首先,`__proto__`属性是对象独有的,它指向对象...

    prototype与__proto__区别详细介绍

    在JavaScript中,`prototype`和`__proto__`都是与对象继承和原型链紧密相关的概念,但它们在用途和性质上有所不同。以下是这两者的主要区别和详细解释: 1. **prototype(原型)** - `prototype`是函数特有的属性...

    js prototype和__proto__的关系是什么

    在JavaScript中,prototype和__proto__是理解对象原型继承机制的关键知识点。下面将详细介绍这两者之间的关系以及它们在JavaScript对象继承中所扮演的角色。 首先,prototype属性是函数所独有的。在JavaScript中,...

    浅谈javascript中的prototype和__proto__的理解

    主要介绍了浅谈javascript中的prototype和__proto__的理解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    简单解析JavaScript中的__proto__属性

    在探讨JavaScript中的__proto__属性之前,首先要明确JavaScript是一门基于原型的语言。这意味着在JavaScript中,对象不是通过类来创建的,而是通过已有的对象创建的。这些“已有对象”被称为原型对象。每个...

    prototype_oop_javascript_ruby_prototype_

    当试图访问对象的某个属性时,如果该属性不存在于当前对象上,JavaScript会查找`__proto__`链,直到找到该属性或到达链的末尾。 例如,我们可以创建一个函数作为构造器,并使用`prototype`属性来添加共享的方法: ...

    帮你彻底搞懂JS中的prototype、__proto__与constructor(图解)

    JavaScript中的`prototype`、`__proto__`和`constructor`是理解JavaScript面向对象编程的关键概念。这篇文章将通过图解的方式帮助读者深入理解这三个属性的关系。 首先,`__proto__`属性,它存在于每个对象中,表示...

    javascript 中__proto__和prototype详解

    __proto__是内部原型,prototype是构造器原型(构造器其实就是函数) 构造器的原型(prototype)是一个对象 那什么是构造器呢? 要想创建一个对象,首先要有一个对象构造器,就像php里面一样,要想创建一个对象,...

    JS原型prototype和__proto__用法实例分析

    JavaScript中的原型(Prototype)机制是实现继承的一种方式,它涉及到两个关键的概念:`prototype`和`__proto__`。这两个属性在JavaScript的对象和函数中扮演着不同的角色。 首先,`prototype`属性主要用于函数对象...

    TsangTszKin#HexoBlog#prototype、__proto__与constructor1

    它的作用就是当访问一个对象的属性时,如果该对象内部不存在这个属性,那么就会去它的__proto__属性所指向的那个对象(可以理解为父对象)里找,如果父对象也不存

    JavaScript中__proto__与prototype的关系深入理解

    在JavaScript中,`__proto__` 和 `prototype` 是两个重要的概念,它们分别涉及对象的内部原型链和构造函数的原型。这篇文章将深入探讨这两者之间的关系。 首先,`__proto__` 属性是一个对象的内部属性,它指向该...

    了解JavaScript中的prototype (实例)

    在旧版浏览器中,可以通过`__proto__`直接访问,但在ES5及以后的规范中,推荐使用`Object.getPrototypeOf`或`Object.prototype.isPrototypeOf`来操作原型链。 ```javascript function Person() {} let person = new...

Global site tag (gtag.js) - Google Analytics