我们先来看一个函数。
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__构成了原型链。上面所面试的原型的指向是否正确,可以通过下图得到验证:
相关推荐
分析javascript中 prototype __proto__ constructor之间的关系
主要给大家介绍了关于Javascript中prototype与__proto__的关系的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
JavaScript中的`prototype`、`__proto__`和`constructor`是理解JavaScript面向对象编程的关键概念。这篇文章通过图解的方式深入浅出地解析了这三个概念之间的关系。 首先,`__proto__`属性是对象独有的,它指向对象...
在JavaScript中,`prototype`和`__proto__`都是与对象继承和原型链紧密相关的概念,但它们在用途和性质上有所不同。以下是这两者的主要区别和详细解释: 1. **prototype(原型)** - `prototype`是函数特有的属性...
在JavaScript中,prototype和__proto__是理解对象原型继承机制的关键知识点。下面将详细介绍这两者之间的关系以及它们在JavaScript对象继承中所扮演的角色。 首先,prototype属性是函数所独有的。在JavaScript中,...
主要介绍了浅谈javascript中的prototype和__proto__的理解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
在探讨JavaScript中的__proto__属性之前,首先要明确JavaScript是一门基于原型的语言。这意味着在JavaScript中,对象不是通过类来创建的,而是通过已有的对象创建的。这些“已有对象”被称为原型对象。每个...
当试图访问对象的某个属性时,如果该属性不存在于当前对象上,JavaScript会查找`__proto__`链,直到找到该属性或到达链的末尾。 例如,我们可以创建一个函数作为构造器,并使用`prototype`属性来添加共享的方法: ...
JavaScript中的`prototype`、`__proto__`和`constructor`是理解JavaScript面向对象编程的关键概念。这篇文章将通过图解的方式帮助读者深入理解这三个属性的关系。 首先,`__proto__`属性,它存在于每个对象中,表示...
__proto__是内部原型,prototype是构造器原型(构造器其实就是函数) 构造器的原型(prototype)是一个对象 那什么是构造器呢? 要想创建一个对象,首先要有一个对象构造器,就像php里面一样,要想创建一个对象,...
JavaScript中的原型(Prototype)机制是实现继承的一种方式,它涉及到两个关键的概念:`prototype`和`__proto__`。这两个属性在JavaScript的对象和函数中扮演着不同的角色。 首先,`prototype`属性主要用于函数对象...
它的作用就是当访问一个对象的属性时,如果该对象内部不存在这个属性,那么就会去它的__proto__属性所指向的那个对象(可以理解为父对象)里找,如果父对象也不存
在JavaScript中,`__proto__` 和 `prototype` 是两个重要的概念,它们分别涉及对象的内部原型链和构造函数的原型。这篇文章将深入探讨这两者之间的关系。 首先,`__proto__` 属性是一个对象的内部属性,它指向该...
在旧版浏览器中,可以通过`__proto__`直接访问,但在ES5及以后的规范中,推荐使用`Object.getPrototypeOf`或`Object.prototype.isPrototypeOf`来操作原型链。 ```javascript function Person() {} let person = new...