JavaScript 对象访问器(Getter 和 Setter)
Getter 和 Setter与函数相比的优点:
- 它提供了更简洁的语法(Getter 和 Setter使用属性形式访问对象方法,不用加括号)
- 它允许属性和方法的语法相同
- 它可以确保更好的数据质量
- 有利于后台工作
Getter(get 关键词)
1 | <body> |
Setter(set 关键词)
1 | var person = { |
JavaScript 函数与 Getter的访问方法不同
例子1使用函数:
1 | var person = { |
例子2使用Getter:
1 | var person = { |
总结:
- 例子 1 以函数形式访问
fullName:person.fullName()
。 - 例子 2 以属性形式访问
fullName:person.fullName
。 - 第二个例子提供了更简洁的语法。
JavaScript 对象构造器
总结
用大写首字母对构造器函数命名是个好习惯。
1
2
3
4
5
6function Person(first, last, age, eye) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eye;
}给已有对象添加属性:
1
对象名.新属性名="新属性值"
给已有对象添加新方法:
1
对象名.新方法名=function(){函数内容}
给构造器添加新属性:
- 方法1:回到构造器函数中进行增加。
- 方法2:
构造器名.prototype.新属性名="新属性值"
- 给构造器添加新方法:
- 方法1:回到构造器函数中进行增加。
- 方法2:
构造器名.prototype.新方法名=function(){函数内容}
对象类型(蓝图)(类)
- 在上面的例子中,函数 Person() 就是对象构造器函数。
- 通过 new 关键词调用构造器函数可以创建相同类型的对象:完整例子
1
2var myFather = new Person("Bill", "Gates", 62, "blue");
var myMother = new Person("Steve", "Jobs", 56, "green");
this 关键词
- 在 JavaScript 中,被称为 this 的事物是代码的“拥有者”。
- this 的值,在对象中使用时,就是对象本身。
- 在构造器函数中,this 是没有值的。它是新对象的替代物。 当一个新对象被创建时,this 的值会成为这个新对象。
- 请注意 this 并不是变量。它是关键词。您无法改变 this 的值。
为(已有)对象添加属性
新属性被添加到 myFather。不是 myMother,也不是任何其他 person 对象。
1 | myFather.nationality = "English"; |
为(已有)对象添加方法
新方法被添加到 myFather。不是 myMother,也不是任何其他 person 对象。
1 | myFather.name = function () { |
为构造器添加属性
- 为(已有)对象添加新属性与新方法都很简单,但与他们不同,为对象构造器添加新属性必须添加到构造器函数内(错误示范:像
Person.nationality = "English";
这样会undefined)1
2
3
4
5
6
7function Person(first, last, age, eyecolor) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eyecolor;
this.nationality = "English";
} - 这样对象属性就可以拥有默认值。
- 完整例子
为构造器添加方法
- 同样无法为对象构造器添加新方法,必须在构造器函数内部向一个对象添加方法:完整例子
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26<p id="demo"></p>
<script>
// Person 对象的构造器函数
function Person(firstName,lastName,age,eyeColor) {
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
this.eyeColor = eyeColor;
//在构造器函数内部向一个对象添加方法
this.changeName = function (name) {
//changeName() 函数把 name 赋值给 person 的 lastName 属性
this.lastName = name;
}
}
// 创建 Person 对象
var myFriend = new Person("Bill","Gates",62,"green");
// 修改姓氏
myFriend.changeName("Jobs");
// 显示姓氏
document.getElementById("demo").innerHTML =
"My friend's last name is " + myFriend.lastName;
</script>
内建 JavaScript 构造器
Math() 对象不算,Math 是全局对象。new 关键词不可用于 Math。
1 | var x1 = {}; // 新对象 |
JavaScript 对象原型
所有 JavaScript 对象都从原型继承属性和方法。
原型继承
- 日期对象继承自 Date.prototype。
- 数组对象继承自 Array.prototype。
- Person 对象继承自 Person.prototype。
- Object.prototype 位于原型继承链的顶端:日期对象、数组对象和 Person 对象都继承自 Object.prototype。
使用 prototype 属性为对象构造器添加新属性/方法
注意:请只修改自己的原型。绝不要修改标准 JavaScript 对象的原型。
- 为对象构造器添加新属性:完整例子
1
2
3
4
5
6
7function Person(first, last, age, eyecolor) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eyecolor;
}
Person.prototype.nationality = "English"; - 为对象构造器添加新方法:完整例子
1
2
3
4
5
6
7
8
9function Person(first, last, age, eyecolor) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eyecolor;
}
Person.prototype.name = function() {
return this.firstName + " " + this.lastName;
};