`
fengsky491
  • 浏览: 30920 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

JavaScript原型链prototype chain

阅读更多
原文地址:http://bbs.51js.com/viewthread.php?tid=79416&extra=page%3D1%26amp%3Bfilter%3Dtype%26amp%3Btypeid%3D12

<script type="text/javascript">

/*
   每个对象实例都有个属性成员用于指向到它的instanceof 对象(暂称为父对象)的原型(prototype)
   我们把这种层层指向父原型的关系称为[原型链 prototype chian]
   原型也具有父原型,因为它往往也是一个对象实例,除非我们人为地去改变它


   Function的父原型指向到Function的原型,Function.prototype的父原型是Object的原型
   Object的父原型也指向到Function的原型,Object.prototype是所有父原型的顶层
   在spiderMonkey引擎中,父原型可以通过 __proto__ 进行访问
*/

Function.prototype.hi = function(){alert('hi Function');}
Object.prototype.hi = function(){alert('hi Object');}

var a = function(){
    this.txt = "a";
}
a.prototype = {
    say:function(){alert('a');}
}

alert(a instanceof Function);//a是Function的实例;
alert(a.__proto__ === Function.prototype);//a的父原型指向到Function的原型;

alert(Function instanceof Object);//Function是Object的实例;
alert(Function.__proto__ === Function.prototype);//Function的父原型指向到Function的原型;
alert(Function.prototype.__proto__ === Object.prototype);//Function的原型的父原型指向到Object的原型

alert(Object.__proto__ === Function.prototype);//Object的父原型指向到Function的原型;
alert(Object.prototype.__proto__);//Object的原型是所有父原型的顶端,它不再具有父原型;


alert(a.prototype instanceof Object);//a的原型也是一个对象
alert(a.prototype.__proto__ === Object.prototype);//a的原型的父原型指向Object的原型



var A = function(){};
A.prototype = new a();
A.prototype.say = function(){
    alert('A');
}

alert(A instanceof Function);//A是Function的实例
alert(A.__proto__ === Function.prototype);//A的父原型指向到Function的原型
alert(A.prototype instanceof a);//A的原型是a的实例
alert(A.prototype.__proto__ === a.prototype);//A的原型的父原型指向到a的原型


var iA = new A();//iA是A的实例,iA.__proto__ === A.prototype
var iB = new a();//iB是a的实例,iB.__proto__ === a.prototype

iA.hi();
/*
iA本身没有hi方法(构造中没有,自己也没有定义过),
于是找iA的prototype,没有找到,
于是找iA.__proto__即A.prototype,也没有找到,
于是再找A.prototype.__proto__即a.prototype,仍然没有发现,
继续查找a.prototype.__proto__即Object.prototype,哇,发现了hi,于是调用它,停止查找
输出:hi Object
*/

iB.hi();
/*
iB本身没有hi方法(构造中没有,自己也没有定义过),
于是找iB的prototype,没有找到,
于是找iB.__proto__即a.prototype,仍然没有发现,
继续查找a.prototype.__proto__即Object.prototype,哇,发现了hi,于是调用它,停止查找
输出:hi Object
*/

a.hi();
/*
a本身没有hi方法(构造中没有,自己也没有定义过),
于是找a的prototype,没有找到,
于是找a.__proto__既Function.prototype,哇,发现了hi,于是调用它,停止查找
输出:hi Function
*/

iA.say();
/*
iA本身没有say方法(构造中没有,自己也没有定义过),
于是找iA的prototype,没有找到,
于是找iA.__proto__即A.prototype,哇,发现了say,于是调用它,停止查找
所以,这里调用的是A.prototype.say
输出:A
*/

iB.say();
/*
iB本身没有say方法(构造中没有,自己也没有定义过),
于是找iB的prototype,没有找到,
于是找iB.__proto__即a.prototype,哇,发现了say,于是调用它,停止查找
所以,这里调用的是a.prototype.say
输出:a
*/

iA.bad();
/*
iA本身没有bad方法(构造中没有,自己也没有定义过),
于是找iA的prototype,没有找到,
于是找iA.__proto__即A.prototype,也没有找到,
于是再找A.prototype.__proto__即a.prototype,仍然没有发现,
继续查找a.prototype.__proto__即Object.prototype,终于是找不到了,停止查找
返回错误,iA.bad不是一个function
*/

</script>
分享到:
评论

相关推荐

    我所理解的从原型到原型链.pdf

    在JavaScript中,理解原型(Prototype)与原型链(Prototype Chain)是至关重要的。这两个概念是语言的核心部分,对于深入理解对象的属性查找机制、继承等方面有着不可替代的作用。 #### 原型(Prototype) 在...

    JavaScript中的原型链prototype介绍

    JavaScript中的原型链(prototype chain)是实现对象继承和属性查找机制的关键部分。在这个概念中,每个对象都有一个内部属性`[[Prototype]]`,通常通过`__proto__`、`Object.getPrototypeOf()`或`o.constructor....

    javascript prototype 原型链

    总结一下,JavaScript原型链的核心思想是对象可以通过原型链向上查找属性或方法,直到找到为止,或者查找到`null`(表示链的终点)。这种机制使得JavaScript具备了类似的类继承特性,但实际上是基于原型的继承。通过...

    javascript学习笔记(九)javascript中的原型(prototype)及原型链的继承方式

    在JavaScript中,原型(Prototype)和原型链(Prototype Chain)是理解对象继承机制的关键概念。在面向对象编程中,对象可以继承自其他对象的属性和方法,这就是所谓的原型继承。在JavaScript里,每个函数都有一个`...

    详解JavaScript中基于原型prototype的继承特性_.docx

    在JavaScript中,对象可以直接从另一个对象继承属性和方法,这主要是通过原型链(prototype chain)来实现的。 首先,每个函数都有一个`prototype`属性,这个属性是一个对象,当通过该函数创建新对象时,新对象会...

    Javascript原型链及instanceof原理详解

    在JavaScript中,每个对象都拥有一个原型(prototype),这个原型自身也是拥有原型的,从而形成了一个原型链(prototype chain)。在原型链上,对象能够继承其原型对象的属性和方法。这个机制是理解JavaScript继承和...

    基于js原型链的小游戏

    JavaScript是Web开发中不可或缺的一部分,尤其在前端领域,它的强大在于动态性和灵活性。在这个"基于js原型链的小游戏"中,我们...这不仅是一个理解JavaScript原型链的好例子,也是实践前端开发技能的绝佳实践项目。

    js 原型对象和原型链理解

    原型对象(Prototype)主要用于实现对象间的继承,而原型链(Prototype Chain)则是JavaScript查找对象属性和方法的机制。 首先,每个函数都有一个`prototype`属性,它是一个对象,用于创建该函数实例时提供共享的...

    prototype

    JavaScript是一种基于对象和原型的动态类型语言,它的对象继承机制是通过原型链(Prototype Chain)来实现的。在JavaScript中,每个对象都有一个内置的`__proto__`属性,这个属性指向了创建该对象的构造函数的原型。...

    第5章 JS基础-原型和原型链【三座大山之一,必考!!!】.rar

    原型链(Prototype Chain)是由这些`__proto__`链接起来的结构。当一个对象的属性被访问时,JavaScript会沿着原型链向上查找,直到找到该属性或到达链的顶部(即`null`),这通常是原型链的终点。这就是JavaScript...

    我所理解的this,闭包,原型链,继承及面向对象.zip

    在JavaScript编程语言中,"this"、闭包(Closure)、原型链(Prototype Chain)和继承是四个核心概念,它们构成了JavaScript面向对象编程的基础。这里,我将深入解析这些概念,并结合实际例子来帮助理解。 首先,让...

    原型链污染漏洞+前后端实战案例

    在JavaScript编程中,原型链(Prototype Chain)是理解对象继承机制的关键。原型链污染漏洞是一种安全问题,它允许攻击者通过篡改或注入代码来操纵对象的原型,从而可能导致数据泄漏、逻辑错误甚至完全控制应用程序...

    分析javascript原型及原型链

    在JavaScript中,原型(Prototype)和原型链(Prototype Chain)是核心概念之一,它们是实现继承的关键,对于理解JavaScript的面向对象编程至关重要。 一、原型对象的理解 当我们用JavaScript创建一个函数时,这个...

    原型与原型链.rar

    在JavaScript中,原型(Prototype)和原型链(Prototype Chain)是理解对象继承和属性查找机制的关键概念。这里,我们深入探讨这两个概念,并结合代码练习来加深理解。 首先,原型是JavaScript中每个对象都有的一种...

    js代码-JavaScript 原型链与继承

    **原型链(Prototype Chain)** 原型链是JavaScript实现继承的一种方式,它基于对象的原型属性。每个JavaScript对象都有一个内置的`__proto__`属性,这个属性指向创建该对象的函数的原型(prototype)。函数的原型...

    javascript原型继承工作原理和实例详解_.docx

    这就是所谓的原型链(Prototype Chain)。 #### 三、JavaScript原型继承的具体实现 ##### 3.1 原型继承的简单实现 通过以下代码片段,我们可以看到如何使用原型继承创建一个简单的继承关系: ```javascript // ...

    JavaScript使用原型和原型链实现对象继承的方法详解

    原型链(prototype chain)则是通过原型对象间的引用形成的一条链路,允许子对象访问父对象的属性和方法。 在JavaScript中,`__proto__`属性(非标准,但在大部分现代浏览器中支持)和`Object.getPrototypeOf`方法...

    深入理解JavaScript系列(6) 强大的原型和原型链

    2. **原型链(Prototype Chain)**: - 原型链是通过原型对象形成的链式结构。 - 当试图访问对象的属性时,JavaScript会首先在当前对象中查找,如果没有找到,就会去其`__proto__`引用的对象中查找,以此类推,...

Global site tag (gtag.js) - Google Analytics