`
Qiao.Gbin
  • 浏览: 995 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

javascript原型链

阅读更多
转自::http://www.w3cgroup.com/article.asp?id=157

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


   在JavaScript中,"一切都是对象,函数是第一型。"
   Function和Object都是函数的实例。
   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.__proto__即A.prototype,也没有找到,
于是再找A.prototype.__proto__即a.prototype,仍然没有发现,
继续查找a.prototype.__proto__即Object.prototype,哇,发现了hi,于是调用它,停止查找
输出:hi Object
*/

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

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

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

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

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

相关推荐

    JavaScript原型链

    JavaScript原型链是JavaScript语言中的一个核心特性,它关乎对象之间的继承关系。在JavaScript中,一切皆为对象,而原型链则是实现对象间属性和方法共享的一种机制。理解原型链对于深入学习JavaScript至关重要。 ...

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

    本文将深入探讨JavaScript原型链的工作原理及其可能导致的安全问题——原型链污染。 首先,JavaScript 中的对象继承并不像传统面向对象语言那样基于类,而是通过原型链机制。每个对象都有一个内部属性`[[Prototype]...

    JavaScript原型链简单图解

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

    Javascript原型链的原理详解

    JavaScript原型链是JavaScript实现继承和共享属性的一种机制。在JavaScript中,每个对象都有一个内部属性`[[Prototype]]`,通常可以通过`__proto__`(非标准,但常见于许多环境)或`Object.getPrototypeOf()`来访问...

    JavaScript原型链与继承操作实例总结

    主要介绍了JavaScript原型链与继承操作,结合实例形式总结分析了javascript原形链与继承的相关概念、使用方法及操作注意事项,需要的朋友可以参考下

    深度探讨javascript函数的原型链和闭包

    理解函数的原型链和闭包对于深入掌握JavaScript至关重要。 首先,让我们看看函数的定义方式。在JavaScript中,我们可以使用`function`关键字直接定义函数,如`function fn(a, b) {}`。此外,函数也可以通过赋值语句...

    JavaScript原型链示例分享

    JavaScript的原型链是理解JavaScript对象继承机制的关键。在JavaScript中,每个对象都有一个内部属性`[[Prototype]]`,通常通过`__proto__`或`Object.getPrototypeOf()...这就是JavaScript原型链的基本工作原理和示例。

    深入理解javascript原型链和继承

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

    深入浅出理解javaScript原型链

    JavaScript原型链是理解JavaScript面向对象编程中的核心概念之一。它是一种机制,通过它可以共享方法和属性,从而实现代码复用和继承。本文将详细介绍原型链的概念、显式和隐式原型链、prototype和__proto__的概念...

    理解JavaScript原型链

    JavaScript原型链是这门语言的核心概念之一,它关系到对象属性的继承机制。在JavaScript中,所有对象都有一个原型,原型也是一个对象,从而形成了一条原型链。每个对象通过内部属性[[Prototype]](ES6后建议使用...

    Javascript原型链和原型的一个误区

    接着,关于prototype和__proto__,这两者都是JavaScript原型链中容易产生混淆的地方。每一个函数都有一个prototype属性,该属性是一个指针,指向函数的原型对象。而每一个JavaScript对象都有一个__proto__属性(注意...

    javascript原型链继承用法实例分析

    JavaScript原型链继承是一种利用对象原型(prototype)进行继承的方式,它是JavaScript语言的核心特性之一,为对象间的继承提供了便利。在JavaScript中,所有的对象都有一个指向其原型对象的内部链接,而这个原型...

    JavaScript 原型链学习总结

    ### JavaScript原型链学习总结 #### 一、JavaScript中的对象与函数 在JavaScript中,一切皆为对象,这包括数字、字符串、数组等基本类型以及函数等复杂类型。更进一步地讲,函数也是对象的一种特殊形式,它既是第...

    js代码-JavaScript 原型链与继承

    原型链和继承是JavaScript中实现面向对象编程的重要概念。本篇将深入探讨这两个关键知识点,并结合提供的`main.js`代码示例进行解析。 ### 一、JavaScript 原型链 原型链是JavaScript中实现对象继承的一种方式,它...

    javascript 原型链维护和继承详解

    JavaScript中的对象通过原型链来进行属性查找和方法调用,而原型链的维护和继承是JavaScript面向对象编程中的核心概念之一。 首先,原型链是指每个对象都会在其内部初始化一个指向构造函数原型(prototype)对象的...

    Javascript原型链及instanceof原理详解

    这个机制是理解JavaScript继承和原型链操作的关键。 要说明原型链的工作原理,我们可以从几个方面着手: 1. __proto__属性:所有JavaScript对象都具有一个__proto__属性,这个属性指向对象的原型对象。然而,这个...

    基于js原型链的小游戏

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

Global site tag (gtag.js) - Google Analytics