1》__proto__
javascript中一切都是对象,每个对象都是基于原型对象创建的,每个对象中都有__proto__属性,这个属性指向的就是它基于的原型对象。
__proto__属性是系统(浏览器)自动给创建的,在对象被创建的时候自动指向基于的原型对象。
比如:
function Foo(){
}
var foo=new Foo();
foo.__proto__指向的就是Foo.prototype
因为Foo函数本身也是个对象,所以Foo.__proto__指向的是Function.prototype
Function.prototype本身也是对象,所以Function.prototype.__proto__指向的是Object.prototype
2》prototype
只有构造函数对象才有prototype属性,构造函数的作用是创建对象,创建对象的时候,它要知道这个对象基于哪个原型来创建,这个prototype指向的就是这个原型。
prototype属性也是系统(浏览器)给创建的,并指向创建对象时基于的原型。
注意不是构造函数本身基于的原型,本身基于的原型都是Function.prototype。
比如:
function Foo(){
}
//系统自动把Foo的prototype属性指向Foo.prototype
//所以,new Foo()的时候,就基于Foo.prototype来创建,
//foo.__proto__就是Foo.prototype
var foo=new Foo();
foo.__proto__和Foo.prototype指向的都是Foo.prototype。
自定义一个Foo构造函数的时候,系统默认会自动指定一个Foo.prototype原型对象,其实就是一个Object对象。
3》constructor
只有原型对象才有constructor属性,而且也是系统(浏览器)给创建的。前面说过构造函数对象的prototype属性会指向一个原型对象,那么这个原型对象中的constructor属性指向的就是这个构造函数。
constructor属性其实是给自定义对象使用的,自定义对象通过constructor属性就可以知道自己是用哪个构造函数new出来的。比如:
function Foo(){
}
var foo=new Foo();
alert(foo.constructor) // function Foo(){}
// foo中没有constructor,foo访问的是它的原型Foo.prototype中的constructor属性。
一个对象被new出来以后,就可以知道自己的两方面事情:
1. 通过foo.__proto__,可以知道自己是基于哪个原型创建出来的,相当于自己的父类
2. 通过foo.constructor,可以知道自己是用哪个构造函数构造出来的相当于自己的类
分享到:
相关推荐
分析javascript中 prototype __proto__ constructor之间的关系
JavaScript中的`prototype`、`__proto__`和`constructor`是理解JavaScript面向对象编程的关键概念。这篇文章通过图解的方式深入浅出地解析了这三个概念之间的关系。 首先,`__proto__`属性是对象独有的,它指向对象...
理解__proto__和prototype这两个概念对于深入掌握JavaScript面向对象编程至关重要。 首先我们来看__proto__属性。每个JavaScript对象都拥有一个__proto__属性,这个属性指向该对象的原型对象。原型对象是另一个对象...
在JavaScript中,prototype和__proto__是理解对象原型继承机制的关键知识点。下面将详细介绍这两者之间的关系以及它们在JavaScript对象继承中所扮演的角色。 首先,prototype属性是函数所独有的。在JavaScript中,...
在JavaScript中,`prototype`和`__proto__`都是与对象继承和原型链紧密相关的概念,但它们在用途和性质上有所不同。以下是这两者的主要区别和详细解释: 1. **prototype(原型)** - `prototype`是函数特有的属性...
JavaScript中的`prototype`、`__proto__`和`constructor`是理解JavaScript面向对象编程的关键概念。这篇文章将通过图解的方式帮助读者深入理解这三个属性的关系。 首先,`__proto__`属性,它存在于每个对象中,表示...
在javascript中,prototype、constructor以及__proto__之间有着“著名”的剪不断理还乱的三角关系,楼主就着自己对它们的浅显认识,来粗略地理理以备忘,有不对之处还望斧正。
而在JavaScript中,对象的继承关系是在运行时动态确定的,任何一个对象都可以通过改变它的__proto__属性来继承另一个对象的属性和方法。 如今,__proto__属性已经被标准化为一个非正式的特性,其标准化的版本是...
它的作用就是当访问一个对象的属性时,如果该对象内部不存在这个属性,那么就会去它的__proto__属性所指向的那个对象(可以理解为父对象)里找,如果父对象也不存
本文档深入探讨了JavaScript中的面向对象特性,包括类、对象、继承、封装和多态性。 在JavaScript中,面向对象主要通过构造函数和原型链实现。构造函数是一种特殊的函数,用于创建和初始化对象。当你使用`new`...
在JavaScript中,每个函数(包括构造函数)都有一个内置的`prototype`属性,这个属性指向一个对象,该对象包含了可以被该函数的所有实例共享的属性和方法。 当我们创建一个新对象时,它会继承其构造函数的`...
JavaScript中的原型(Prototype)机制是实现继承的一种方式,它涉及到两个关键的概念:`prototype`和`__proto__`。这两个属性在JavaScript的对象和函数中扮演着不同的角色。 首先,`prototype`属性主要用于函数对象...
JavaScript中的`prototype`是一个核心概念,它涉及到对象继承和函数原型。在JavaScript中,每创建一个函数,该函数就会自动获得一个名为`prototype`的属性,这个属性是一个对象,用于实现对象间的继承。同时,每个...
总之,`prototype`在JavaScript的面向对象编程中起着至关重要的作用,它实现了对象的继承和属性查找,使代码更加灵活和可扩展。理解并熟练运用`prototype`是成为一名高级JavaScript开发者的必备技能。
JavaScript中的prototype属性是理解面向对象编程的关键概念之一。在JavaScript中,每个函数都有一个prototype属性,这个属性指向一个对象,这个对象就是所谓的原型对象。当我们创建一个函数实例时,实例会自动获取一...
在JavaScript中,`constructor`和`prototype`是两个关键概念,它们构成了JavaScript...在JavaScript中,正确地利用`constructor`、`prototype`和`__proto__`可以创建复杂的对象结构,实现高效的数据管理和代码复用。