原型及原型链②

news/2024/11/17 21:20:47/

文章目录

      • 一、prototype和__proto__的区别

本文转载:https://www.cnblogs.com/shuiyi/p/5305435.html
#原型及原型链②

对于新人来说,JavaScript的原型是一个很让人头疼的事情,一来prototype容易与__proto__混淆,二来它们之间的各种指向实在有些复杂,其实市面上已经有非常多的文章在尝试说清楚,有一张所谓很经典的图,上面画了各种线条,一会连接这个一会连接那个,说实话我自己看得就非常头晕,更谈不上完全理解了。所以我自己也想尝试一下,看看能不能把原型中的重要知识点拆分出来,用最简单的图表形式说清楚。

我们知道原型是一个对象,其他对象可以通过它实现属性继承。但是尼玛除了prototype,又有一个__proto__是用来干嘛的?长那么像,让人怎么区分呢?它们都指向谁,那么混乱怎么记啊?原型链又是什么鬼?相信不少初学者甚至有一定经验的老鸟都不一定能完全说清楚,下面用三张简单的图,配合一些示例代码来理解一下。

一、prototype和__proto__的区别

在这里插入图片描述

var a = {};
console.log(a.prototype);  //undefined
console.log(a.__proto__);  //Object {}var b = function(){}
console.log(b.prototype);  //b {}
console.log(b.__proto__);  //function() {}

在这里插入图片描述

/*1、字面量方式*/
var a = {};
console.log(a.__proto__);  //Object {}console.log(a.__proto__ === a.constructor.prototype); //true/*2、构造器方式*/
var A = function(){};
var a = new A();
console.log(a.__proto__); //A {}console.log(a.__proto__ === a.constructor.prototype); //true/*3、Object.create()方式*/
var a1 = {a:1}
var a2 = Object.create(a1);
console.log(a2.__proto__); //Object {a: 1}console.log(a.__proto__ === a.constructor.prototype); //false(此处即为图1中的例外情况)

在这里插入图片描述

var A = function(){};
var a = new A();
console.log(a.__proto__); //A {}(即构造器function A 的原型对象)
console.log(a.__proto__.__proto__); //Object {}(即构造器function Object 的原型对象)
console.log(a.__proto__.__proto__.__proto__); //null

http://www.ppmy.cn/news/484833.html

相关文章

2.图解原型和原型链。

概览 1.instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。2.经典的原型和原型链的分析:分成普通与顶级函数&对象两种。3.原型:JavaScript声明构造函数时,会在内存中创建一个对应的对象,…

原型链(介绍)

什么是原型链? 原型链通俗易懂的理解就是可以把它想象成一个链条,互相连接构成一整串链子!而原型链中就是实例对象和原型对象之间的链接。每个函数都有一个prototype属性,这个prototype属性就是我们的原型对象,我们拿…

原型链图解

首先,要明确几个点: 1.在JS里,万物皆对象。方法(Function)是对象,方法的原型(Function.prototype)是对象。因此,它们都会具有对象共有的特点。 即:对象具有属性__proto__&#xff0c…

原型、原型对象和原型链

原型: __ proto __ 原型对象: prototype 每个对象中都有 __ proto __ 一、构造函数和原型 ES6之前并没有引入类的概念,对象不是基于类创建的,是用一种称为构造函数的特殊函数来定义的。 创建对象的三种方式: 1.通过…

带你了解原型链

了解原型链可以先看我上期发布的帖子再来看这篇会更好的理解: 详解原型对象_loulansd的博客-CSDN博客 问:什么是原型链? 得先知道什么是对象,比如一个物品一只笔就是对象,他的属性可以是黑色彩色的它的方法可以是写字,包括我们生活的万物都有自身的属性,那么我们就可以理解万…

原型和原型链(二)

文章目录 前言一、_proto_(上文提到)1、定义:2、小测试: 二、原型链1、定义及相关解释:2、原型链图: 前言 在上篇文章中对构造函数和原型对象进行了相应的总结。此文章将会对原型链进行详细的阐述。希望大家对原型和原型链的理解…

原型链的解说

首先,我们要知道,万物皆对象,一切的一切都是由对象构成的。 一、关于函数的原型对象 在JavaScript中,如果我们创建一个函数A,那么浏览器就会在内存空间里创建一个对象B,而且每个函数都会默认会有一个属性…

【js进阶】-原型/原型链

一、构造函数创建对象 我们先使用构造函数创建一个对象,先来认识下构造函数 function Person() { } var person1 new Person(); person1.name 张三; console.log(person1.name) // 张三在这个例子中,Person 就是一个构造函数,我们使用 ne…