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); // ?
相关推荐
### 探索JavaScript的原型链:原型继承的奥秘 #### 一、JavaScript与原型继承的基础 JavaScript(简称JS)是一种广泛使用的高级编程语言,在Web开发中占据着核心地位。它的特性之一是基于原型的继承机制,这与其他...
JavaScript 原型链是语言的核心特性之一,它在实现对象的继承和共享属性时起着关键作用。本文将深入探讨JavaScript原型链的工作原理及其可能导致的安全问题——原型链污染。 首先,JavaScript 中的对象继承并不像...
JavaSciptDOM基本操作,JavaScipt函数基础,JavaScipt流程语句,JavaScript变量,JavaScript数据类型,JavaScript数组,JavaScript正则表达式,JavaScript字符串函数,Window对象等图解。JS高手进阶的工具图谱
在JavaScript的世界里,原型继承不仅是实现对象功能共享的核心机制,也是其面向对象编程风格的基础。本文将深入探讨JavaScript原型继承的工作原理、实现方式以及在现代Web开发中的应用。 JavaScript的原型继承是一种...
5. 对象与原型:理解JavaScript中的对象创建和原型链,以及如何通过原型实现继承。 二、JavaScript高级特性 1. 异步编程:学习事件循环、回调函数、Promise和async/await,掌握异步处理方法。 2. 模块化:了解...
原型链是JavaScript实现面向对象特性的关键机制,它允许对象间共享属性和方法。每个JavaScript对象都有一个内部属性`__proto__`,指向它的构造函数的`prototype`。当尝试访问对象的一个属性时,如果该对象上没有找到...
### 我所理解的从原型到原型链 在JavaScript中,理解原型(Prototype)与原型链(Prototype Chain)是至关重要的。这两个概念是语言的核心部分,对于...希望这篇解析能够帮助你更好地理解原型和原型链的概念及其应用。
JavaScript:对象与原型链教程.docx
深入理解JavaScript系列(5):强大的原型和原型链 深入理解JavaScript系列(6):S O L I D五大原则之单一职责SRP 深入理解JavaScript系列(7):S O L I D五大原则之开闭原则OCP 深入理解JavaScript系列(8):...
原型和原型链是JavaScript中极其重要的概念,它们构成了JavaScript中对象和继承的核心机制。通过理解和掌握这些概念,开发者可以更高效地利用JavaScript的强大功能来构建复杂的Web应用程序。此外,原型的灵活性也为...
### JavaScript探秘:强大的原型和原型链 #### 引言 在JavaScript中,原型和原型链的概念至关重要,它们是理解面向对象编程的基础之一。本文将深入探讨这些概念,并通过具体的代码示例来解释如何利用原型和原型链...
- **原型链**:JavaScript的对象可以通过原型链共享属性和方法,实现继承。 - **原型对象**:每个函数都有一个prototype属性,它是一个对象,可以添加方法和属性,这些将被实例共享。 - **闭包**:JavaScript中的...
JavaScript对象原型链是JavaScript语言中的一个核心概念,它在实现继承和共享属性方面起到了关键作用。原型链基于原型(prototype)对象,通过一系列链接形成一个链式结构,使得一个对象可以访问到另一个对象的属性...
JavaScript中的原型(Prototype)机制是实现对象继承和数据共享的关键特性。通过原型,我们可以让不同对象实例共享某些属性和方法,从而节省内存空间并提高代码复用性。本篇文章将深入探讨JavaScript原型数据共享和...
JavaScript的原型链是理解JavaScript对象继承机制的关键。在JavaScript中,每个对象都有一个内部属性`[[Prototype]]`,通常通过`__proto__`或`Object.getPrototypeOf()`来访问。这个属性引用了创建该对象的函数的...
在探讨JavaScript中原型和原型链的详细知识前,我们首先要了解JavaScript对象的几个核心概念,包括私有...通过原型和原型链,JavaScript可以以一种非常优雅的方式实现继承和方法共享,创建更加灵活和高效的对象结构。
JavaScript公式解析器 fparser提供了一个Formula类,该类将包含数学公式(例如x*sin(PI*x/2) )的字符串解析为可评估的对象。 然后,可以为所有未知变量/函数提供值,并从公式中计算出数值。 有关示例应用程序,请...
JavaScript原型链是JavaScript实现继承和共享属性的一种机制。在JavaScript中,每个对象都有一个内部属性`[[proto]]`,这个属性通常通过`__proto__`访问,它指向创建该对象的函数的`prototype`属性。原型链的主要...
JavaScript中的继承和原型链是其核心特性之一,尤其对于从基于类的语言背景转到JavaScript的开发者来说,理解这一概念至关重要。在JavaScript中,没有传统的类,而是基于对象和原型进行继承。每个对象都有一个指向其...