JavaScript 对象方法
前面两篇文章讲的都是对象的属性,这一节讲对象的另一种成员,方法。方法让对象不只是存放数据,还能拥有行为。
方法就是值为函数的属性。函数怎么写见 JavaScript 函数的定义与调用,把函数放进对象,这个属性就变成了方法。
定义和调用方法
在对象里写一个键值对,值的位置放一个函数,就定义了一个方法。
const person = {
name: '小明',
sayHi: function () {
console.log('你好');
},
};
person 现在有两个成员,属性 name 和方法 sayHi。调用方法用 对象名.方法名(),和调用普通函数一样要加括号。
person.sayHi();
输出 你好。方法名后面必须跟一对括号,才会执行方法里的代码。
方法内部访问自身属性
对象的方法经常要使用对象自己的属性。比如 sayHi 想报出名字,就得拿到 name。方法内部用 this 访问同一个对象的属性。
const person = {
name: '小明',
sayHi: function () {
console.log('你好,我叫' + this.name);
},
};
person.sayHi();
输出 你好,我叫小明。方法里的 this 指向调用它的那个对象,这里就是 person,所以 this.name 的值是 小明。
不写 this 会怎样。方法内部直接写 name,会去找一个叫 name 的变量,方法并不知道外面那个对象叫什么名字。所以方法内访问自身属性,一律用 this.属性名。
this 指向调用者
this 的值由调用方式决定。谁调用了方法,方法里的 this 就是谁。同一个函数,放到不同对象里,各自调用时 this 各指各的。看这个对比例子。
function greet() {
console.log('你好,我叫' + this.name);
}
const tom = {
name: '汤姆',
sayHi: greet,
};
const jerry = {
name: '杰瑞',
sayHi: greet,
};
tom.sayHi();
jerry.sayHi();
第一行输出 你好,我叫汤姆。第二行输出 你好,我叫杰瑞。同一个 greet 函数,由 tom 调用时 this 是 tom,由 jerry 调用时 this 是 jerry。这就是谁调用指向谁。
小结
方法就是值为函数的属性,调用用 对象名.方法名()。方法内部用 this.属性名 访问自身属性,this 指向调用者,谁调用就指向谁。this 还有更复杂的情况,下一篇文章 JavaScript this 指向基础 详细讲。