在 JavaScript 中,几乎“所有事物”都是对象
- 布尔是对象(如果用 new 关键词定义)
- 数字是对象(如果用 new 关键词定义)
- 字符串是对象(如果用 new 关键词定义)
- 日期永远都是对象
- 算术永远都是对象
- 正则表达式永远都是对象
- 数组永远都是对象
- 函数永远都是对象
- 对象永远都是对象
所有 JavaScript 值,除了原始值,都是对象。
JavaScript原始值
原始值指的是没有属性或方法的值
原始数据类型指的是拥有原始值的数据
JavaScript定义了5种原始数据类型:
- string
- number
- boolean
- null
- undefined
原始值是一成不变的(它们是硬编码的,因此不能改变)
假设 x = 3.14,您能够改变 x 的值。但是您无法改变 3.14 的值
对象是包含变量的变量
JavaScript对象是易变的
对象是易变的:它们通过引用来寻址,而非值。
如果 person 是一个对象,下面的语句不会创建 person 的副本:
var x = person; // 这不会创建 person 的副本。
对象 x 并非 person 的副本。它就是 person。x 和 person 是同一个对象。
对 x 的任何改变都将改变 person,因为 x 和 person 是相同的对象。
var person = {firstName:"Bill", lastName:"Gates", age:62, eyeColor:"blue"}
var x = person;
x.age = 10; // 这将同时改变 both x.age 和 person.age
注意:JavaScript变量不是易变的,只有JavaScript对象如此
JavaScript对象属性
for…in
语句可以遍历对象的属性
for (variable in object) {
要执行的代码
}
var person = {fname:"Bill", lname:"Gates", age:62};
for (x in person) {
txt += person[x];
}
删除属性
// delete关键词可以从对象中删除属性
var person = {firstName:"Bill", lastName:"Gates", age:62, eyeColor:"blue"};
delete person.age; // 或 delete person["age"];
// delete关键词会同时删除属性的值和属性本身
JavaScript对象方法
JavaScript方法是能够在对象上执行的动作,是包含函数定义的属性
JavaScript对象构造器
有时候我们需要创建相同“类型”的许多对象的“蓝图”,创建一种“对象类型”的方法是使用对象构造器函数。下面的函数Person()
就是对象构造器函数,通过new
关键字调用构造器函数可以创建相同类型的对象
function Person(first, last, age, eyecolor) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eyecolor;
}
var myUncle = new Person("Bill", "Gates", 62, "blue");
var myMother = new Person("Steve", "Jobs", 56, "green");
为构造器添加属性——必须添加到构造器函数
function Person(first, last, age, eyecolor) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eyecolor;
// 新属性
this.nationality = "English";
}
为构造器添加方法——必须在构造器函数内部添加
function Person(firstName, lastName, age, eyeColor) {
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
this.eyeColor = eyeColor;
this.changeName = function (name) {
this.lastName = name;
};
}
// changename()函数把name赋值给Person的lastname属性
JavaScript对象原型
原型继承
所有JavaScript对象都从原型继承属性和方法,例如:
日期对象继承自Date.prototype
,数组对象继承自Array.prototype
,Person对象继承自Person.protype
Object.prototype
位于原型继承链的顶端:
日期对象、数组对象和 Person 对象都继承自 Object.prototype
JavaScript prototype
属性允许为对象构造器添加新属性和新方法:
function Person(first, last, age, eyecolor) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eyecolor;
}
// 添加新属性
Person.prototype.nationality = "English";
// 添加新方法
Person.prototype.name = function() {
return this.firstName + " " + this.lastName;
};