You.Dont.Know.JS.this.and.Object.Prototypes.2014.7.pdf
### JavaScript中的`this`关键字与对象原型 #### 引言 在《You Don't Know JS: this & Object Prototypes》一书中,作者Kyle Simpson深入探讨了JavaScript中的`this`关键字和对象原型机制。这本书不仅适合JavaScript新手,也适用于那些希望更深入理解语言核心特性的有经验开发者。通过本书的学习,读者将能够掌握`this`绑定、对象原型以及行为委托等概念,并学会如何利用这些知识来编写更加高效、可维护的代码。 #### `this`关键字详解 1. **`this`绑定的基础**:`this`关键字在JavaScript中是非常重要的概念,它代表了一个函数执行时的上下文。`this`的值取决于函数是如何被调用的,而不是它在哪里被定义的。 - **全局上下文中的`this`**:在非严格模式下,如果一个函数在全局作用域中被调用(即没有被其他函数调用),那么`this`通常指向全局对象(在浏览器中通常是`window`)。 - **对象方法中的`this`**:当函数作为某个对象的方法被调用时,`this`通常指向该对象。 - **构造函数中的`this`**:当函数作为构造函数使用时(使用`new`关键字),`this`指向新创建的对象实例。 2. **`this`绑定的行为**:`this`绑定的行为可能会因为函数调用的方式不同而有所变化,这包括: - **隐式绑定**:当函数作为对象的一个属性被调用时,`this`会绑定到该对象。 - **显式绑定**:可以使用`.call()`、`.apply()`或`.bind()`等方法来明确地设置`this`的值。 - **默认绑定**:如果函数以独立的形式被调用(既不是作为对象方法也不是作为构造函数),则`this`默认指向全局对象(非严格模式下)或者`undefined`(严格模式下)。 3. **箭头函数中的`this`**:箭头函数不绑定自己的`this`值,而是继承其所在上下文的`this`值。这意味着箭头函数内部的`this`通常是指向外层函数的`this`,或者是在非函数上下文中定义时的`this`值。 #### 对象原型机制 1. **对象与原型链**:JavaScript中的对象是基于原型的语言。每个对象都有一个内部链接指向它的原型对象。当我们尝试访问对象的一个属性或方法时,如果当前对象上找不到这个属性或方法,JavaScript引擎就会沿着原型链向上查找,直到找到为止。 2. **原型对象的性质**:每一个由构造函数创建的对象都会自动获得该构造函数的`prototype`属性作为它的原型。原型对象自身也有一个原型,这样就形成了一个链,称为原型链。 3. **原型链的作用**:原型链机制使得JavaScript能够实现继承和重用代码。当对象需要访问一个它自身不具有的属性或方法时,JavaScript会沿着原型链查找,直到找到这个属性或方法为止。如果没有找到,则返回`undefined`。 4. **使用原型链实现继承**:通过原型链,我们可以轻松地实现继承。例如,可以通过将一个对象的原型设置为另一个对象,从而让这个对象继承另一个对象的属性和方法。 5. **混合模式**:为了模仿类的继承模式,开发者经常使用混合模式,即结合使用原型链和构造函数。这种方法通常被称为“伪类”模式,通过组合两种方式的优点来实现更加灵活的继承模型。 #### 行为委托 1. **行为委托概述**:行为委托是一种设计模式,其中对象之间的关系是通过链接而不是克隆来建立的。这种模式强调的是对象之间的协作而非继承。 2. **对象链接到其他对象(OLOO)编码风格**:这种编码风格自然地实现了行为委托的概念。通过将对象链接到其他对象,而不是继承它们的属性和方法,可以更容易地管理和扩展代码。 #### 结论 通过深入理解`this`关键字、对象原型以及行为委托的概念,开发者可以更好地掌握JavaScript的核心特性,写出更加健壮和灵活的代码。《You Don't Know JS: this & Object Prototypes》这本书提供了一种独特的视角来审视这些关键概念,对于希望深入了解JavaScript内部运作机制的开发者来说,是一本不可或缺的参考书。
剩余172页未读,继续阅读
- wdeef2015-05-07我是初学者,还不能看太懂。。但是应该很有帮助
- tlforest2016-07-13很好的资源,谢谢分享
- 粉丝: 269
- 资源: 399
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助