文档章节

JavaScript中的prototype、__proto__和constructor

a
 ancle
发布于 2016/04/15 11:16
字数 360
阅读 5
收藏 0

__proto__,指的是对象的内部原型;

prototype,为构造器的原型;

 

一、所有构造器/函数的(__proto__)都指向Function.prototype,它是一个空函数(Empty Function)

注:也可理解为所有对象(构造器/函数)通过其内部__proto__实现继承,继承Function.prototype的公共属性和方法)

所有构造器都来自于Function.prototype,甚至包括根构造器Object及Function自身。所有构造器都继承了Function.prototype的属性和方法。

所有构造器(含内置及自定义)的(__proto__)都是Function.prototype,但是Function.prototype的(__proto__)指向的是Object.prototype。(也可理解为Function.prototype通过__proto__从Object.prototype继承根对象Object所有公共属性和方法。)

 

Function.prototype.__proto__ == Object.prototype;

最后,Object.prototype.__proto__ == null

 

二、所有对象实例的(__proto__)都指向其构造器的prototype

构造器的实例对象的内部原型(__proto__),总是指向其构造器的prototype

function Person(name) {

    this.name = name;

}

 

var p = new Person("Ancle");

console.log(p.__proto__ === Person.prototype) // true

p是Person的实例对象,p的内部原型(__proto__)总是指向其构造器Person的prototype

 

三、constructor属性:每个对象实例都有一个constructor属性,以获取它的构造器

借用上述Person例子:

console.log(p.__proto__ === p.constructor.prototype) // true

 

对象直接量:使用对象直接量方式定义的对象,其构造器(constructor)指向的是根构造器Object,Object.prototype是一个空对象{}

例子:

var p = {};

console.log(p.constructor === Object) // true

console.log(p.constructor.prototype === Object.prototype) // true

© 著作权归作者所有

a
粉丝 1
博文 54
码字总数 43568
作品 0
太原
私信 提问
关于javascript的原型和原型链,看我就够了(三)

温故 我们先回顾一下前两天讨论的内容 创建对象的三种方式 通过对象直接量 通过new创建对象 通过Object.create() js中对象分为两种 函数对象 普通对象 原型对象prototype 每一个函数对象都有...

陌上寒
2018/11/04
0
0
由Javascript的继承引发的:抽象类、接口、多态,甚至是类型转换!

工作中需要用到Javascript,关注了Javascript中继承复用的问题,翻阅了网上的各种关于Javascript继承的帖子,感觉大都思考略浅,并没有做过多说明,简单粗暴的告诉你实现Javascript继承有1.2...

xue777hua
2013/07/28
2.7K
11
JavaScript中__proto__与prototype的关系

JavaScript中proto与prototype的关系 这里讨论下对象的内部原型(proto)和构造器的原型(prototype)的关系。 一、所有构造器/函数的proto都指向Function.prototype,它是一个空函数(Empty f...

泡不烂的凉粉
2013/05/21
113
0
如果再被问到原型和原型链......

求职过程中,经常会被问到关于原型和原型链,就问题本身而言并不难,主要是考察对JavaScript核心概念的理解,但如何能够说明白确实需要认真准备下。 我印象比较深刻的一次,有个面试官出了一...

我是一尾
09/22
0
0
js中的prototype和构造函数

js中没有类的感念,继承也是通过原型链来实现的对象的继承而不是类的继承 Vjeux写的这篇文章应该能帮助我们更好的理解js中原型的工作方式:http://blog.vjeux.com/2011/javascript/how-proto...

leo-H
2013/04/08
622
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 如果是个帅小伙你愿意和他出去吗

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 小小编辑推荐:《Ghost 》游戏《死亡搁浅》原声 《Ghost 》游戏(《死亡搁浅》原声) - Au/Ra / Alan Walker 手机党少年们想听歌,请使劲儿戳...

小小编辑
43分钟前
67
5
java通过ServerSocket与Socket实现通信

首先说一下ServerSocket与Socket. 1.ServerSocket ServerSocket是用来监听客户端Socket连接的类,如果没有连接会一直处于等待状态. ServetSocket有三个构造方法: (1) ServerSocket(int port);...

Blueeeeeee
今天
6
0
用 Sphinx 搭建博客时,如何自定义插件?

之前有不少同学看过我的个人博客(http://python-online.cn),也根据我写的教程完成了自己个人站点的搭建。 点此:使用 Python 30分钟 教你快速搭建一个博客 为防有的同学不清楚 Sphinx ,这...

王炳明
昨天
5
0
黑客之道-40本书籍助你快速入门黑客技术免费下载

场景 黑客是一个中文词语,皆源自英文hacker,随着灰鸽子的出现,灰鸽子成为了很多假借黑客名义控制他人电脑的黑客技术,于是出现了“骇客”与"黑客"分家。2012年电影频道节目中心出品的电影...

badaoliumang
昨天
16
0
很遗憾,没有一篇文章能讲清楚线程的生命周期!

(手机横屏看源码更方便) 注:java源码分析部分如无特殊说明均基于 java8 版本。 简介 大家都知道线程是有生命周期,但是彤哥可以认真负责地告诉你网上几乎没有一篇文章讲得是完全正确的。 ...

彤哥读源码
昨天
19
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部