`

javascript中的__proto__, prototype和constructor

阅读更多

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,可以知道自己是用哪个构造函数构造出来的相当于自己的类

 

分享到:
评论

相关推荐

    prototype,__proto,constructor

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

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

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

    javascript 中__proto__和prototype详解

    理解__proto__和prototype这两个概念对于深入掌握JavaScript面向对象编程至关重要。 首先我们来看__proto__属性。每个JavaScript对象都拥有一个__proto__属性,这个属性指向该对象的原型对象。原型对象是另一个对象...

    js prototype和__proto__的关系是什么

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

    prototype与__proto__区别详细介绍

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

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

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

    图解prototype、proto和constructor的三角关系

    在javascript中,prototype、constructor以及__proto__之间有着“著名”的剪不断理还乱的三角关系,楼主就着自己对它们的浅显认识,来粗略地理理以备忘,有不对之处还望斧正。

    简单解析JavaScript中的__proto__属性

    而在JavaScript中,对象的继承关系是在运行时动态确定的,任何一个对象都可以通过改变它的__proto__属性来继承另一个对象的属性和方法。 如今,__proto__属性已经被标准化为一个非正式的特性,其标准化的版本是...

    TsangTszKin#HexoBlog#prototype、__proto__与constructor1

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

    Javascript(OOP).rar_javascript_javascript O_oop javascript

    本文档深入探讨了JavaScript中的面向对象特性,包括类、对象、继承、封装和多态性。 在JavaScript中,面向对象主要通过构造函数和原型链实现。构造函数是一种特殊的函数,用于创建和初始化对象。当你使用`new`...

    了解JavaScript中的prototype (实例)

    在JavaScript中,每个函数(包括构造函数)都有一个内置的`prototype`属性,这个属性指向一个对象,该对象包含了可以被该函数的所有实例共享的属性和方法。 当我们创建一个新对象时,它会继承其构造函数的`...

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

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

    JavaScript的prototype

    JavaScript中的`prototype`是一个核心概念,它涉及到对象继承和函数原型。在JavaScript中,每创建一个函数,该函数就会自动获得一个名为`prototype`的属性,这个属性是一个对象,用于实现对象间的继承。同时,每个...

    JavaScript中prototype的使用

    总之,`prototype`在JavaScript的面向对象编程中起着至关重要的作用,它实现了对象的继承和属性查找,使代码更加灵活和可扩展。理解并熟练运用`prototype`是成为一名高级JavaScript开发者的必备技能。

    JavaScript中的prototype(原型)属性研究

    JavaScript中的prototype属性是理解面向对象编程的关键概念之一。在JavaScript中,每个函数都有一个prototype属性,这个属性指向一个对象,这个对象就是所谓的原型对象。当我们创建一个函数实例时,实例会自动获取一...

    深入分析js中的constructor和prototype

    在JavaScript中,`constructor`和`prototype`是两个关键概念,它们构成了JavaScript...在JavaScript中,正确地利用`constructor`、`prototype`和`__proto__`可以创建复杂的对象结构,实现高效的数据管理和代码复用。

Global site tag (gtag.js) - Google Analytics