`

javascript 原型链YY:共享角度解析

阅读更多

javascript原型图片如下:是从其它地方考过来的



 

 

 

 上面的图片看起来很复杂,但是还是简单的,理解思路如下:

 1. 假设什么都没有,全部空白

 

 2. 类似java,通过 new Xxx 来创建对象 (Xxx 假设叫 Function)

 

 3. 接受一个语法,function Function 可以申明"类",(看过scala其实也不难想象,所以下面的类都是加""的理解,不同于java)

    (js通过自己的语法,通过function来new 对象)

     或者想象这是你自己的语言,function Function 会主动在内存开辟空间,保存属性和方法

     ps: function Function 和 new Function()是不一样的,不要混杂

    3.1 想象 function Function 其实也是一个对象,即内部创建了 { }.Function

         { }里面有很多的内部属性和方法 ,此文称这个对象为   innerFunc1

 

 4. 除了Function类,还有其它许多类,比如Foo, 则 new Foo(..)  (innerFunc2)

     除了Foo还有其它很多类,那么不断的new:

     出现问题:这些类没有交互,比如 共享一些属性和方法

     4.1 :于是从innerFunc1开始,抽离出一些公共的属性和方法(Function.prototype)

              Foo通过__proto__ 引用这些共享的属性和方法

     4.2 如此循环,Foo 自己也把innerFun2中的部分属性和方法共享出去 (Foo.prototype)

 

>>>>>>>>>>>>>>>>>>>>

5. 至此,原先从无到现在,已经形成了一幅图画,如下:(后期补)

 

6. 疑惑解答:目前为止形成的类体系和javascript本身的体系相比,尚缺如下元素:

    6.1 Function.__proto__ 到共享之间的链条

    6.2 尚未出现new Object()

    6.3 Function.prototype.__proto__ 到Object.prototype 的链条

 

   6.1解答:

    Function.prototype本身就是从innerFunc1中分离出去的共享属性和方法,

    Function.__proto__指向这些属性和方法,并没有不妥.

    这里的核心就是: function Function 声明的时候,js内核其实开辟了内存空间 { },暂时成为innerFunc1

   6.1.1 想象原始 每个 function 声明都会创建innerFunc, prototype的出现是为了 对这些 innerFunc进行公共属性和方法的抽象 

 

   6.2解答:

   至此,发现所有的prototype都是相互独立,后来逐渐发现,这些prototype也可以抽离出一些共享属性和方法。于是就出现了 function Object .

   function Object 本身共享了 function Function对象的属性和方法

                          <= Object.__proto__ = Function.prototype

   而function Object共享的属性和方法(Object.prototype) 是作为 所有 innerFunc.prototype 共享属性和方法

    的存在, 所以 function Object 是一个特别的 function 对象而已

 

   6.3解答:

     见6.2 Function.prototype__proto__ 因为 Object.prototype是作为 所有prototype的共享而存在的

 

 最后 做如下的题目 ,应该是十分简单的了

 function Foo() {};

var foo = new Foo();

 

alert(foo instanceof Foo); // ?

alert(foo instanceof Object); // ?

alert(foo instanceof Function); // ?

alert(Foo instanceof Function); // ?

alert(Foo instanceof Object); // ?

 

    

   

 

     

     

 

    

 

 

 

 

 

 

 

 

 

 

 

  • 大小: 176.5 KB
分享到:
评论

相关推荐

    【技术分享】从浅入深 Javascript 原型链与原型链污染 .pdf

    JavaScript 原型链是语言的核心特性之一,它在实现对象的继承和共享属性时起着关键作用。本文将深入探讨JavaScript原型链的工作原理及其可能导致的安全问题——原型链污染。 首先,JavaScript 中的对象继承并不像...

    JavaScript原型链简单图解

    JavaSciptDOM基本操作,JavaScipt函数基础,JavaScipt流程语句,JavaScript变量,JavaScript数据类型,JavaScript数组,JavaScript正则表达式,JavaScript字符串函数,Window对象等图解。JS高手进阶的工具图谱

    JavaScript你一定要搞懂的原型链

    当访问一个对象的属性或方法时,如果对象本身没有定义该属性或方法,JavaScript 就会沿着原型链向上查找,直到找到该属性或方法或者到达原型链的末尾(null)为止。 原型链图是用于表示 JavaScript 中对象之间原型...

    javascript-原型与原型链

    javascript-原型与原型链

    强大的原型和原型链

    原型和原型链是JavaScript中极其重要的概念,它们构成了JavaScript中对象和继承的核心机制。通过理解和掌握这些概念,开发者可以更高效地利用JavaScript的强大功能来构建复杂的Web应用程序。此外,原型的灵活性也为...

    js高端系列教程(26)——JavaScript探秘:强大的原型和原型链.docx

    ### JavaScript探秘:强大的原型和原型链 #### 引言 在JavaScript中,原型和原型链的概念至关重要,它们是理解面向对象编程的基础之一。本文将深入探讨这些概念,并通过具体的代码示例来解释如何利用原型和原型链...

    深入理解javascript原型链和继承

    在深入理解JavaScript原型链和继承的概念之前,首先要了解JavaScript是一种基于对象的语言,而非传统的面向对象语言。它没有类的概念,函数可以被视为构造器,而对象则是通过构造函数、原型对象和实例之间的特殊关系...

    原型链全套图解.rar

    在JavaScript中,原型链是理解对象继承和属性查找机制的关键概念。它是一种基于原型(prototype)的继承方式,使得一个对象能够从另一个对象那里继承属性和方法。在本压缩包"原型链全套图解.rar"中,包含了全面的...

    JavaScript原型链示例分享

    JavaScript的原型链是理解JavaScript对象继承机制的关键。在JavaScript中,每个对象都有一个内部属性`[[Prototype]]`,通常通过`__proto__`或`Object.getPrototypeOf()`来访问。这个属性引用了创建该对象的函数的...

    JavaScript对象原型链原理解析

    JavaScript中的原型链是一种核心特性,它使得对象之间能够共享属性和方法,实现代码的复用。原型链基于原型(prototype)对象和__proto__属性构建,是JavaScript实现继承的主要方式。接下来,我们将深入探讨...

    JavaScript中原型和原型链详解

    在探讨JavaScript中原型和原型链的详细知识前,我们首先要了解JavaScript对象的几个核心概念,包括私有...通过原型和原型链,JavaScript可以以一种非常优雅的方式实现继承和方法共享,创建更加灵活和高效的对象结构。

    头歌教学实践平台 Web前端开发基础 JavaScript学习手册一:JS简介

    - 原型链:每个对象都有一个[[Prototype]]内部属性,通常通过__proto__访问,形成了原型链,实现对象间的继承。 4. **DOM操作** - DOM API:通过JavaScript操作HTML元素,包括获取元素、创建元素、修改元素属性等...

    【JavaScript源代码】五句话帮你轻松搞定js原型链.docx

    JavaScript原型链是JavaScript实现继承和共享属性的一种机制。在JavaScript中,每个对象都有一个内部属性`[[proto]]`,这个属性通常通过`__proto__`访问,它指向创建该对象的函数的`prototype`属性。原型链的主要...

    头歌教学实践平台 Web前端开发基础 JavaScript学习手册四:JS对象

    - **原型链**:通过原型链,对象可以继承其他对象的属性和方法,实现代码复用。 5. **对象的复制**: - **浅拷贝**:只复制对象的表面层次,如 `var copyObj = JSON.parse(JSON.stringify(originalObj))`。 - **...

    js中的继承与原型链1

    JavaScript中的继承和原型链是其核心特性之一,尤其对于从基于类的语言背景转到JavaScript的开发者来说,理解这一概念至关重要。在JavaScript中,没有传统的类,而是基于对象和原型进行继承。每个对象都有一个指向其...

    Javascript原型继承

    1. **原型链**:在JavaScript中,当试图访问一个对象的属性时,如果该对象本身没有该属性,引擎会查找其`__proto__`链上的属性,直到找到该属性或遍历完整个原型链。这就是原型链的工作原理。 2. **构造函数、实例...

    javascript 原型模式实现OOP的再研究

    JavaScript中的原型模式是一种实现面向对象编程(OOP)的关键机制,它基于原型继承,使得对象可以从其他对象那里获得属性和方法。在这个模式下,每个函数都有一个`prototype`属性,这个属性是一个对象,用于共享属性...

    JavaScript语言精粹.修订版 Javascript:The Good Parts 中英 pdf

    修订版",即《Javascript: The Good Parts》,是由知名的计算机科学家Douglas Crockford所著,这本书深入探讨了JavaScript的核心概念和最佳实践,为开发者提供了宝贵的洞察力。 书中的内容主要分为以下几个部分: ...

    浅析Javascript原型继承 推荐第1/2页

    在JavaScript中,继承主要通过原型链实现。首先,我们需要区分几个重要概念:函数(Function),对象(Object),构造器(Constructor),以及实例(Instance)。在JavaScript中,函数实际上也是一种特殊的对象,它...

Global site tag (gtag.js) - Google Analytics