六维教程

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 指向基础 详细讲。

上一篇
JavaScript 属性删除与遍历
下一篇
JavaScript this 指向基础