总结javascript原型链的概念
1. 每个javascript对象都有一个“原型对象”,这个对象在不同的解释器下的实现不同。比如在firefox下,每个对象都有一个隐藏的__proto__属性,这个属性就是“原型对象”的引用。以下代码在firefox下可以跑,在ie下则不行
var base = {
name : "kyfxbl"
};
var obj = {
__proto__ : base
};
alert(obj.name);
2. 当在对象上查找某属性时,会首先在此对象内查找。如果找不到,则顺着原型链自下而上在“原型对象”上查找,直到遇到“原型对象”为null,如果依然没找到,则返回undefined。
这个查找过程是解释器来保证的,所以不需要显式调用__proto__属性。比如上面的代码中,使用obj.name调用即可,不需要用obj.__proto__.name。(实际上也不可能,因为不同的浏览器,__proto__属性的名称是不同的)
3. 默认对象的“原型对象”是Object.prototype,而Object.prototype的“原型对象”则是null。也就是说
obj.__proto__ == Object.prototype;// true
Object.prototype.__proto__ == null;// true
4. 但如果一个对象是通过构造器创建,则其原型对象会自动被指向构造函数的prototype属性
function Base() {
this.name = "kyfxbl";
}
var obj = new Base();
alert(obj.__proto__ == Base.prototype);// true
5.
所有函数的“原型对象”是Function.prototype,也就是说
function Base() {
}
alert(Base.__proto__ == Function.prototype);// true
6. Function.prototype有一个constructor属性,会指向自身
alert(Function.prototype.constructor == Function);// true
function func() {
}
alert(func.__proto__.constructor == Function);// true
7. 构造函数,和构造函数.prototype是完全不同的东西
function func1() {
}
function func2() {
}
func1.name = "kyfxbl";
func2.prototype.name = "kyfxbl";
var o1 = new func1();
var o2 = new func2();
alert(o1.name);// undefined
alert(o2.name);// kyfxbl
但是通过构造函数.prototype.constructor,可以引用到构造函数。
function func() {
}
alert(func.prototype.constructor == func);// true
alert(func.constructor == func);// false
alert(func.constructor == Function);// true
分享到:
相关推荐
JavaSciptDOM基本操作,JavaScipt函数基础,JavaScipt流程语句,JavaScript变量,JavaScript数据类型,JavaScript数组,JavaScript正则表达式,JavaScript字符串函数,Window对象等图解。JS高手进阶的工具图谱
深度探讨javascript函数的原型链和闭包
NULL 博文链接:https://ywxowen999.iteye.com/blog/1135884
【技术分享】从浅入深 Javascript 原型链与原型链污染 APT web安全 网络安全 安全 自动化
本文实例分析了Javascript原型链的原理。分享给大家供大家参考,具体如下: 一、JavaScript原型链 ECMAScript中描述了原型链的概念,并将原型链作为实现继承的主要方法。其基本思想是利用原型让一个引用类型继承另一...
深入理解javascript原型和闭包(01)——一切都是对象 深入理解javascript原型和闭包(02)——函数和对象的关系
当访问一个对象的属性或方法时,如果对象本身没有定义该属性或方法,JavaScript 就会沿着原型链向上查找,直到找到该属性或方法或者到达原型链的末尾(null)为止。 原型链图是用于表示 JavaScript 中对象之间原型...
前端面试题,包含JavaScript的闭包,作用域,原型,原型链,上下文环境以及DOM,BOM封装函数深度克隆,以及一些常见的·JS问题,试题简单但是容易混淆,作为前端工程师必考题
javascript-原型与原型链
主要介绍了JavaScript原型链与继承操作,结合实例形式总结分析了javascript原形链与继承的相关概念、使用方法及操作注意事项,需要的朋友可以参考下
本文实例讲述了javaScript的原型链。分享给大家供大家参考。具体分析如下: 对于javascript原型链,以前都觉得是个很深的东西,一直没有理解很明白,今天看了一些介绍后,发现这张图,表示再没有什么语言能比这张...
JavaScript 不包含传统的类继承模型,而是使用 prototypal 原型模型。...由于 JavaScript 是唯一一个被广泛使用的基于原型继承的语言,所以理解两种继承模式的差异是需要一定时间的,今天我们就来了解一下原型和原型链
原型和原型链作为深入学习JavaScript最重要的概念之一,如果掌握它了后,弄清楚例如:JavaScript的继承,new关键字的原来、封装及优化等概念将变得不在话下,那么下面我们开始关于原型和原型链的介绍。 什么是原型?...
主要介绍了JavaScript原型链示例,有需要的朋友可以参考一下
javascript的原型与原型链的详细的解析,一篇从认识到熟悉深入的好文章!
在上一篇文章中,介绍了原型的概念,了解到在javascript中构造函数、原型对象、实例三个好基友之间的关系:每一个构造函数都有一个“守护神”——原型对象,原型对象心里面也存着一个构造函数的“位置”,两情相悦,...
许多人对JavaScript的原型及原型链仍感到困惑,网上的文章又大多长篇大论,令读者不明觉厉。下面小编将用最简洁明了的图文介绍JavaScript的原型及原型链。
本文给大家介绍javascript原型及原型链相关知识,本文分步骤,介绍的非常详细,对js原型原型链相关知识感兴趣的朋友一起学习吧