`

javascript原型链体会

阅读更多
总结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
分享到:
评论

相关推荐

    JavaScript原型链简单图解

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

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

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

    JavaScript原型链

    NULL 博文链接:https://ywxowen999.iteye.com/blog/1135884

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

    【技术分享】从浅入深 Javascript 原型链与原型链污染 APT web安全 网络安全 安全 自动化

    Javascript原型链的原理详解

    本文实例分析了Javascript原型链的原理。分享给大家供大家参考,具体如下: 一、JavaScript原型链 ECMAScript中描述了原型链的概念,并将原型链作为实现继承的主要方法。其基本思想是利用原型让一个引用类型继承另一...

    深入理解javascript原型和闭包

    深入理解javascript原型和闭包(01)——一切都是对象 深入理解javascript原型和闭包(02)——函数和对象的关系

    JavaScript你一定要搞懂的原型链

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

    Web前端面试题目JavaScript(作用域,原型。原型链,闭包,封装函数).txt

    前端面试题,包含JavaScript的闭包,作用域,原型,原型链,上下文环境以及DOM,BOM封装函数深度克隆,以及一些常见的·JS问题,试题简单但是容易混淆,作为前端工程师必考题

    javascript-原型与原型链

    javascript-原型与原型链

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

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

    深入浅出理解javaScript原型链

    本文实例讲述了javaScript的原型链。分享给大家供大家参考。具体分析如下: 对于javascript原型链,以前都觉得是个很深的东西,一直没有理解很明白,今天看了一些介绍后,发现这张图,表示再没有什么语言能比这张...

    强大的原型和原型链

    JavaScript 不包含传统的类继承模型,而是使用 prototypal 原型模型。...由于 JavaScript 是唯一一个被广泛使用的基于原型继承的语言,所以理解两种继承模式的差异是需要一定时间的,今天我们就来了解一下原型和原型链

    一篇文章让你搞懂JavaScript 原型和原型链

    原型和原型链作为深入学习JavaScript最重要的概念之一,如果掌握它了后,弄清楚例如:JavaScript的继承,new关键字的原来、封装及优化等概念将变得不在话下,那么下面我们开始关于原型和原型链的介绍。 什么是原型?...

    JavaScript原型链示例分享

    主要介绍了JavaScript原型链示例,有需要的朋友可以参考一下

    js原型链详解

    javascript的原型与原型链的详细的解析,一篇从认识到熟悉深入的好文章!

    深入理解javascript原型链和继承

    在上一篇文章中,介绍了原型的概念,了解到在javascript中构造函数、原型对象、实例三个好基友之间的关系:每一个构造函数都有一个“守护神”——原型对象,原型对象心里面也存着一个构造函数的“位置”,两情相悦,...

    图文详解JavaScript的原型对象及原型链

    许多人对JavaScript的原型及原型链仍感到困惑,网上的文章又大多长篇大论,令读者不明觉厉。下面小编将用最简洁明了的图文介绍JavaScript的原型及原型链。

    JavaScript原型及原型链终极详解

    本文给大家介绍javascript原型及原型链相关知识,本文分步骤,介绍的非常详细,对js原型原型链相关知识感兴趣的朋友一起学习吧

Global site tag (gtag.js) - Google Analytics