JavaScript极简入门教程(二):对象和函数
阅读本文需要有其他语言的编程经验。
JavaScript 中的简单类型包括:
1.数字
2.字符串
3.布尔(true 和 false)
4.null
5.undefined
此外的其他类型均是对象(我们不要被 typeof 操作符的返回值所迷惑),例如:
1.函数
2.数组
3.正则表达式
4.对象(对象自然也是对象)
对象基础
在 JavaScript 中,对象是属性的集合(对象为关联数组),每个属性包括:
1.属性名,必须为字符串
2.属性值,可以为除了 undefined 之外的任何值
通过对象 literal 创建对象:
// 通过对象 literal {} 创建空对象
var empty_object = {};
对象的属性名和属性值:
var stooge = {
// "first-name" 为属性名,"Jerome" 为属性值
"first-name": "Jerome",
// "last-name" 为属性名,"Howard" 为属性值
"last-name": "Howard"
};
如果属性名是合法的标识符,那么可以省略引号:
var flight = {
airline: "Oceanic",
number: 815,
departure: {
IATA: "SYD",
time: "2004-09-22 14:55",
city: "Sydney"
},
arrival: {
IATA: "LAX",
time: "2004-09-23 10:42",
city: "Los Angeles"
}
};
我们看一下属性访问的例子:
var owner = { name: "Name5566" };
owner.name; // "Name5566"
owner["name"]; // "Name5566"
owner.job; // undefined
owner.job = "coder"; // 或者 owner["job"] = "coder";
如果属性名不是合法标识符,那么需要用引号包裹。不存在的属性值为 undefined。对象是通过引用而非按值传递:
var x = {};
var owner = x;
owner.name = "Name5566";
x.name; // x.name === "Name5566"
这里 x 和 owner 引用同一个对象。
对象的属性可以使用 delete 操作符删除:
delete obj.x; // 删除对象 obj 的 x 属性
对象的原型(prototype)
每一个对象都被链接了一个原型对象(prototype object),对象能够从原型对象中继承属性。我们通过对象 literal 创建一个对象,它的原型对象为 Object.prototype 对象(Object.prototype 对象本身没有原型对象)。我们在创建对象的时候,可以设置对象的原型对象(之后再讨论具体的设置方法)。在尝试获取(而非修改)对象的某个属性时,如果该对象不存在此属性,那么 JavaScript 会尝试从此对象的原型对象中获取此属性,如果原型对象中没有该属性,那么再从此原型对象的原型对象中查找,以此类推,直到 Object.prototype 原型对象。相比获取属性而言,我们修改对象的某个属性时,不会影响原型对象。
函数基础
在 JavaScript 中函数也是对象,其链接到 Function.prototype 原型对象(Function.prototype 链接到 Object.prototype)。函数存在一个名为 prototype 的属性,其值的类型为对象,此对象存在一个属性 constructor,constructor 的值为此函数:
var f = function() {}
typeof f.prototype; // 'object'
typeof f.prototype.constructor; // 'function'
f === f.prototype.constructor; // true