ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
http://speakingjs.com/es5/ch17.html [TOC] # 第17章 对象和继承 在JavaScript的面向对象编程中,有下面这些内容层次: 1. 第1节:面向对象与单一对象(包含在第1节:单一对象) 2. 第2节:对象的原型链(第2节中描述:对象之间的原型关系) 3. 第3节:构造器作为实例的工厂,类似于其他语言中的类(在第3节中讨论过:实例的构造函数工厂) 4. 第4节:子类化,通过继承现有的方法创建新的构造函数(第4节:构造函数之间的继承关系) 每节都只依赖于之前的层次,使您能够逐步地学习JavaScript 面向对象编程。章节1和2构成了一个简单的核心,当你对更复杂的第三节和第四节感到困惑的时候你可以回头查看它们。 ## 第一节 单一对象 粗略地来说, JavaScript 中的所有对象都是从字符串到值的映射 (字典)。对象中的 (键、值) 项称为属性。属性的键始终是文本字符串。属性的值可以是任何 JavaScript 值, 包括函数。方法是其值为函数的属性。 ..... ## 任何值转化为对象 这不是常见的用例,但有时会需要把任何一个值转化为对象,`Object()`,用作函数(不是构造函数),提供该服务。 它会产生以下结果: | 输入值 | 结果 | | --- | --- | | (Called with no parameters) | {} | | `undefined` | {} | | `null` | {} | | A boolean `bool` | new Boolean(`bool`) | | A number `num` | new Number(`num`) | | A string `str` | new String(`str`) | | An object `obj` | `obj` (unchanged, nothing to convert) | 示例: ```js > Object(null) instanceof Object true > Object(false) instanceof Boolean true > var obj = {}; > Object(obj) === obj true ``` 下面的函数检查值是否为对象: ```js function isObject(value) { return value === Object(value); } ``` 注意,如果值不是一个对象,上面的函数将会创建其对象。你可以通过`typeof`,实现相同的功能(见[陷阱:typeof null](###))。 您还可以调用`Object`作为构造函数,结果与将其作为函数调用的结果相同: ```js > var obj = {}; > new Object(obj) === obj true > new Object(123) instanceof Number true ``` *提示*: 避免构造函数;一个空的对象字面量几乎总是一个更好的选择: ```js var obj = new Object(); // avoid var obj = {}; // prefer ``` ## `this`作为函数和方法的隐式参数 当你调用一个函数时,`this`总是一个(隐式)参数: **草率模式下的常规函数** ### 调用函数时设置`this`:`call()`、`apply()`和`bind()` 记住,函数也是对象。