`

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面向对象编程pdf

    JavaScript通过函数和原型链来模拟传统意义上的类和继承,从而实现了面向对象的特性。 在书中举例说明了如何通过构造器函数来创建对象,并利用原型(prototype)给对象添加方法。在JavaScript中,构造函数和原型是...

    javascript权威指南笔记

    原型继承是JavaScript实现面向对象编程的方式,通过原型链,对象能够共享属性和方法,实现代码复用。 数组和集合也是笔记的重点。JavaScript的数组支持多种操作,如push、pop、slice等,而Set和Map等ES6新增的集合...

    javascript源码大全.rar

    用户可以通过这个文件系统地学习JavaScript语法、函数、对象、DOM操作等基础知识,同时也能了解到高级特性,如闭包、原型链、异步编程等。CHM文件的结构通常包括目录、索引和搜索功能,方便用户快速定位到所需的信息...

    JavaScript学习笔记

    接着是原型和原型链,这是JavaScript继承的基础。每个对象都有一个proto属性,指向创建它的构造函数的prototype属性。通过原型链,子对象可以访问父对象的属性和方法,实现继承。 JavaScript还支持事件驱动编程,...

    悟透JavaScript

    JavaScript使用原型链实现继承,这与传统的类继承有所不同。书中的禅意解读可能帮助读者以全新的视角理解这一机制,同时讲解构造函数、原型对象和实例之间的关系。面向对象编程的思想,如封装、继承和多态,也会以...

    js学习心得体会工作范文.pdf

    对象则是数据和行为的封装,理解原型链和原型继承,对于编写可维护的代码至关重要。 3. **DOM操作**:JavaScript与HTML紧密关联,通过DOM(文档对象模型)接口,可以动态修改网页内容,实现页面交互。学会选择、...

    learningJs.zip

    4. **原型与原型链**:JavaScript使用原型(prototype)来实现继承,每个对象都有一个__proto__属性,指向其构造函数的原型。原型链则构成了对象间继承的关系,用于查找属性和方法。 5. **事件与DOM操作**:...

    11-总结.md

    理解原型链的工作方式和各对象间的关联对于深入理解JavaScript是非常重要的。了解原型链的实际执行结果有助于理解对象属性和方法的查找过程。 - Promise链式调用的执行顺序。Promise是JavaScript中处理异步操作的一...

    js 黑客帝国

    通过对示例代码的解析,我们可以了解到函数、对象、闭包、原型链等核心概念,以及模块化、异步编程等进阶技术。 在工具方面,JavaScript有许多强大的库和框架,如jQuery简化DOM操作,React和Vue.js用于构建用户界面...

    javascript-koans

    - **对象和原型**:对象的创建、属性访问、原型链、继承、构造函数和实例化。 - **数组方法**:map、filter、reduce、find、findIndex等。 - **异步编程**:回调函数、Promise、async/await。 - **错误处理**:...

    Blog:记录自己研究学习的实现原理,心得体会与实践方案

    博主在这里可能分享了如何有效地利用JavaScript特性,如闭包、原型链、异步编程(Promise和async/await)等,以及如何避免常见的性能陷阱。 接着,理论与原理部分可能涵盖了JavaScript语言的基础,如变量作用域、...

    essay:一些学习总结

    JavaScript的另一大特色是原型和原型链。每个对象都有一个内部[[Prototype]],通常通过__proto__属性或Object.getPrototypeOf访问。通过原型链,对象能继承其他对象的属性和方法,实现了类的模拟。ES6引入了类的概念...

    learn:自己的学习笔记,记录着成长。感觉萌萌哒

    JavaScript的对象是基于键值对的,笔记中可能详细解释了如何创建和操作对象,以及原型链的工作原理。这包括构造函数、prototype属性、__proto__和Object.create()方法等。此外,闭包和作用域也是JavaScript的难点,...

    LearnMania

    在LearnMania中,我们可以看到如何创建自定义对象,如学习资源、课程模块等,并利用原型链实现功能复用。 三、函数与闭包 函数是JavaScript中的第一类公民,可以作为值传递,也可以作为返回值。闭包则是JavaScript...

    fe-blog:好好学习,天天向上

    随着Web应用复杂性的增加,JavaScript也发展出了许多高级特性,例如闭包、原型链、异步编程(Promise、async/await)等。深入理解这些概念能帮助开发者写出更高效、可维护的代码。在这个项目中,你可以期待找到这些...

    代码:本书中的代码示例

    在闭包和继承的讲解中,代码可以揭示如何创建和管理作用域、如何利用原型链实现对象的继承关系;而在性能优化方面,代码示例则可以用于展示如何使用现代JavaScript特性减少计算量、提高运行效率。每个代码文件都附有...

    changed2048:给室友的记忆

    “changed2048”是基于JavaScript实现的,这是一种广泛应用于网页开发的脚本语言,具备动态、弱类型、原型链等特点。JavaScript在游戏开发中的应用,主要体现在处理用户交互、动画效果和数据运算上。在这个项目中,...

Global site tag (gtag.js) - Google Analytics