`
113.com
  • 浏览: 80539 次
  • 来自: 广州
社区版块
存档分类
最新评论

js原型链的原理图

    博客分类:
  • JS
 
阅读更多
任何一个对象都有一个prototype的属性,在js中可以把它记为:__proto__
 

当初ECMAscript的发明者为了简化这门语言,同时又保持继承的属性,于是就设计了这个链表。。
在数据结构中学过链表不,链表中有一个位置相当于指针,指向下一个结构体。

于是乎__proto__也一样,每当你去定义一个prototype的时候,相当于把该实例的__proto__指向一个结构体,那么这个被指向结构体就称为该实例的原型。

文字说起来有点儿绕,看图说话

复制代码 代码如下:

var foo = {
x: 10,
y: 20
};

 

Figure 1. A basic object with a prototype.


当我不指定__proto__的时候,foo也会预留一个这样的属性,

如果有明确的指向,那么这个链表就链起来啦。

很明显,下图中b和c共享a的属性和方法,同时又有自己的私有属性。

__proto__默认的也有指向。它指向的是最高级的object.prototype,而object.prototype的__proto__为空。

复制代码 代码如下:

var a = {
x: 10,
calculate: function (z) {
return this.x + this.y + z
}
};
var b = {
y: 20,
__proto__: a
};

var c = {
y: 30,
__proto__: a
};

// call the inherited method
b.calculate(30); // 60

 

Figure 2. A prototype chain.


理解了__proto__这个属性链接指针的本质。。再来理解constructor。

当定义一个prototype的时候,会构造一个原形对象,这个原型对象存储于构造这个prototype的函数的原形方法之中.

复制代码 代码如下:
 
/ a constructor function
function Foo(y) {
  // which may create objects
  // by specified pattern: they have after
  // creation own "y" property
  this.y = y;
}
 
// also "Foo.prototype" stores reference
// to the prototype of newly created objects,
// so we may use it to define shared/inherited
// properties or methods, so the same as in
// previous example we have:
 
// inherited property "x"
Foo.prototype.x = 10;
 
// and inherited method "calculate"
Foo.prototype.calculate = function (z) {
  return this.x + this.y + z;
};
 
// now create our "b" and "c"
// objects using "pattern" Foo
var b = new Foo(20);
var c = new Foo(30);
 
// call the inherited method
b.calculate(30); // 60
c.calculate(40); // 80
 
// let's show that we reference
// properties we expect
 
console.log(
 
  b.__proto__ === Foo.prototype, // true
  c.__proto__ === Foo.prototype, // true
 
  // also "Foo.prototype" automatically creates
  // a special property "constructor", which is a
  // reference to the constructor function itself;
  // instances "b" and "c" may found it via
  // delegation and use to check their constructor
 
  b.constructor === Foo, // true
  c.constructor === Foo, // true
  Foo.prototype.constructor === Foo // true
 
  b.calculate === b.__proto__.calculate, // true
  b.__proto__.calculate === Foo.prototype.calculate // true
 
);
 

 

Figure 3. A constructor and objects relationship.

http://dmitrysoshnikov.com/ecmascript/javascript-the-core/
分享到:
评论

相关推荐

    JavaScript你一定要搞懂的原型链

    通过掌握原型链的概念和工作原理,开发者可以更好地利用 JavaScript 的面向对象特性。 这是一个可编辑的xmind文件,对原型链有清晰的勾画,不同的链用不同颜色进行了标识,内容一目了然,可以帮助快速学习原型链。

    JavaScript对象原型链原理详解

    这篇文章主要介绍了JavaScript对象原型链原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一个js对象,除了自己设置的属性外,还会自动生成proto、...

    javaScript核心原理

    ### JavaScript核心原理:深入理解对象与原型链 #### 前言 JavaScript 是一门高度抽象、面向对象的语言,广泛应用于Web开发中。它的核心特性之一就是处理对象(Object)的能力。对象不仅构成了JavaScript的基础数据...

    js原型链原理看图说明

    于是乎__proto__也一样,每当你去定义一个prototype的时候,相当于把该实例的__proto__指向一个结构体,那么这个被指向结构体就称为该实例的原型。 文字说起来有点儿绕,看图说话 代码如下: var foo = { x: 10, y: ...

    关于JavaScript 原型链的一点个人理解

    在JavaScript中,每个对象都有一个内部属性`[[Prototype]]`,这个属性是原型链的核心。虽然我们可以通过`prototype`属性来操作这个链,但实际的链接是由`[[Prototype]]`完成的。 `prototype`属性通常用于创建函数的...

    JS组织结构图大整合

    这个压缩包里的内容很可能是各种不同类型的JS概念和框架的可视化表示,如JavaScript的基本数据类型、原型链、闭包、作用域、模块化、异步编程等核心概念,以及像React、Angular、Vue等前端框架的组件结构图。...

    jQuery_的原型关系图

    在这个图中,我们可以看到对象之间的继承关系,以及jQuery如何扩展和利用JavaScript的原型链机制。 首先,让我们讨论JavaScript的原型(Prototype)概念。在JavaScript中,每个对象都有一个内置的`__proto__`属性,...

    Javascript中 关于prototype属性实现继承的原理图

    首先,我们需要明确一点,JavaScript是一种...以上就是关于JavaScript中通过prototype属性实现继承的原理图的核心知识点。在实际应用中,我们通常根据具体的场景选择适合的继承方式,以达到代码复用和功能扩展的目的。

    js的全套学习总结,xmind版本

    了解如何创建和操作对象,以及原型、原型链和构造函数的工作原理至关重要。 ES6(ECMAScript 2015)引入了许多新特性,如类(实际上是一种语法糖)、模块(import和export)、解构赋值、模板字符串、let和const变量...

    JavaScript精华代码2(图片集)

    5. **面向对象编程**:JavaScript支持基于原型的面向对象编程,包括构造函数、原型链、实例化和继承等概念。图片可能展示了一些对象和类的创建方法。 6. **闭包**:闭包是JavaScript中的一个重要特性,允许函数访问...

    理解Javascriptinstanceof实现原理

    ### 理解JavaScript `instanceof` 实现原理 ...通过以上分析,我们可以更深刻地理解 JavaScript 中 `instanceof` 的实现原理及其背后涉及的原型链机制。这对于编写高效、可靠的 JavaScript 代码至关重要。

    javascript

    ### JavaScript对象模型详解 #### 一、概述 在JavaScript中,对象是编程的核心概念之一,几乎...通过掌握对象的创建方式、原型链的工作原理以及内存管理机制,开发者能够更好地编写高效、可维护的JavaScript代码。

    web前端原型

    在原型设计中,JavaScript常用于模拟实际功能,比如按钮点击后的响应、表单验证、页面跳转等,让非技术人员也能理解功能的工作原理。 在"原型.rp"文件中,我们可以预览和编辑完整的交互设计,包括页面布局、按钮...

    JavaScript程序设计课件

    原型链是JavaScript继承的核心,课件可能会解释如何通过原型链实现对象间的属性共享和方法继承。 4. **事件与DOM操作**:在Web开发中,JavaScript常用于处理用户交互。事件监听、触发和事件传播是关键概念,而DOM...

    day03-js高级资料.zip

    1. **原型和原型链**:这是理解JavaScript对象继承的基础。每个JavaScript对象都有一个proto属性,指向创建该对象的构造函数的原型,形成了一条链,即原型链。通过原型链,对象可以共享属性和方法。 2. **闭包**:...

    TpArqswCodeCityJs:Js 的原型 CodeCity

    2. **原型链(Prototype Chain)**: 当试图访问一个对象的属性时,如果该对象本身没有这个属性,JavaScript 会查找其 `__proto__` 指向的对象,这个过程会一直持续到找到属性或者到达原型链的顶端,即 `null`。...

    JavaScript_Leetcode解决方案.zip

    5. **原型链**:JavaScript的继承机制基于原型链,通过对象之间的原型关系实现。在处理面向对象问题时,理解原型链是必要的。 6. **异步编程**:JavaScript的事件循环和回调、Promise、async/await等异步处理方式在...

Global site tag (gtag.js) - Google Analytics