JavaScript中的方法指的是什么我来为你解答

1.什么是方法

定义并调用一个常规函数:


  1. function greet(who) { 
  2.   return `Hello, ${who}!`; 
  3.  
  4. greet('World'); // => 'Hello, World!' 

function关键字后跟其名称,参数和主体:function greet(who){…}进行常规的函数定义。

greet('World')是常规的函数调用。函数greet('World')接受参数中的数据。

如果who是一个对象的属性呢?要方便访问对象的属性,我们可以将函数附加到该对象,换句话说,就是创建一个方法。

我们将greet()作为对象world的一种方法:


  1. const world = { 
  2.   who: 'World'
  3.  
  4.  greet() { return `Hello, ${this.who}!`; }} 
  5.  
  6. world.greet(); // => 'Hello, World!' 

greet() { … }现在是属于world对象的方法, world.greet()是方法调用。

在greet()方法内部,this指向该方法所属的对象—world,这就是为啥可以this.who访问 word属性的原因。

注意,this也称为上下文。

上下文是可选的

在上一个示例中,我们使用this来访问该方法所属的对象,但是 JS 没有强制让方法使用 this。

因此,可以将对象用作方法的命名空间:


  1. const namespace = { 
  2.   greet(who) { 
  3.     return `Hello, ${who}!`; 
  4.   }, 
  5.  
  6.   farewell(who) { 
  7.     return `Good bye, ${who}!`; 
  8.   } 
  9.  
  10. namespace.greet('World');    // => 'Hello, World!' 
  11. namespace.farewell('World'); // => 'Good bye, World!' 

namespace是一个包含2个方法的对象:namespace.greet()和namespace.farewell()。

2. 对象字面量方法

如前所述,我们可以直接在对象字面量中定义方法


  1. const world = { 
  2.   who: 'World'
  3.  
  4.  greet() { return `Hello, ${this.who}!`; }}; 
  5.  
  6. world.greet(); // => 'Hello, World!' 

greet() { …. }是在对象定义的方法,这种定义类型称为速记方法定义(从ES2015开始可用)。方法定义的语法也更长:


  1. const world = { 
  2.   who: 'World'
  3.   greet: function() {  
  4.     return `Hello, ${this.who}!`;  
  5.   } 
  6.  
  7. world.greet(); // => 'Hello, World!' 

greet: function() { … }是一个方法定义,注意附加的冒号和function关键字。

动态添加方法

方法只是一个函数,它作为属性存储在对象上。因此,我们可以向对象动态添加方法:


  1. const world = { 
  2.   who: 'World'
  3.  
  4.   greet() { 
  5.     return `Hello, ${this.who}!`; 
  6.   } 
  7. }; 
  8.  
  9. // A a new property holding a function 
  10. world.farewell = function () { 
  11.   return `Good bye, ${this.who}!`; 
  12.  
  13. world.farewell(); // => 'Good bye, World!' 

3.类方法

在 JavaScript 中,类别语法定义了一个类别,该类别将用作其实例的模板。

类也可以有方法:


  1. class Greeter { 
  2.   constructor(who) { 
  3.     this.who = who; 
  4.   } 
  5.  
  6.  greet() { console.log(this === myGreeter); // logs true return `Hello, ${this.who}!`; }} 
  7.  
  8. const myGreeter = new Greeter('World'); 
  9. myGreeter.greet(); // => 'Hello, World!'  

greet() { … }是在类内部定义的方法。

每次我们使用new操作符(例如myGreeter = new Greeter('World'))创建一个类的实例时,都可以在创建的实例上调用方法。

myGreeter.greet()是如何在实例上调用方法greet()的方法。重要的是方法内部的this等于实例本身:this等于greet() { … }方法内部的 myGreeter。

【声明】:芜湖站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

相关文章