方法的定义 - JavaScript

方法的定义 - JavaScript

方法的定义Baseline Widely availableThis feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2015.

Learn moreSee full compatibilityReport feedback从 ECMAScript 2015 开始,在对象初始器中引入了一种更简短定义方法的语法,这是一种把方法名直接赋给函数的简写方式。

尝试一下

const obj = {

foo() {

return "bar";

},

};

console.log(obj.foo());

// Expected output: "bar"

语法var obj = {

property( parameters… ) {},

*generator( parameters… ) {},

async property( parameters… ) {},

async* generator( parameters… ) {},

// with computed keys:

[property]( parameters… ) {},

*[generator]( parameters… ) {},

async [property]( parameters… ) {},

// compare getter/setter syntax:

get property() {},

set property(value) {}

};

描述该简写语法与 ECMAScript 2015 的getter和setter语法类似。

如下代码:

jsvar obj = {

foo: function () {

/* code */

},

bar: function () {

/* code */

},

};

现可被简写为:

jsvar obj = {

foo() {

/* code */

},

bar() {

/* code */

},

};

备注:

简写语法使用具名函数而不是匿名函数(如…foo: function() {}…)。具名函数可以从函数体调用(这对匿名函数是不可能的,因为没有标识符可以引用)。详细信息,请参阅function。

生成器方法生成器方法也可以用这种简写语法定义。使用它们时,

简写语法中的星号(*)必须出现在生成器名前,也就是说* g(){}可以正常工作,而g *(){}不行。

非生成器方法定义可能不包含yield关键字。这意味着遗留的生成器函数也不会工作,并且将抛出 SyntaxError。始终使用yield与星号(*)结合使用。

js// 用有属性名的语法定义方法(ES6 之前):

var obj2 = {

g: function* () {

var index = 0;

while (true) yield index++;

},

};

// 同一个方法,简写语法:

var obj2 = {

*g() {

var index = 0;

while (true) yield index++;

},

};

var it = obj2.g();

console.log(it.next().value); // 0

console.log(it.next().value); // 1

Async 方法Async 方法也可以使用简写语法来定义。

js// 用有属性名的语法定义方法(ES6 之前):

var obj3 = {

f: async function () {

await some_promise;

},

};

// 同一个方法,简写语法:

var obj3 = {

async f() {

await some_promise;

},

};

Async 生成器方法生成器方法也能成为 async.

jsvar obj4 = {

f: async function* () {

yield 1;

yield 2;

yield 3;

},

};

// The same object using shorthand syntax

var obj4 = {

async *f() {

yield 1;

yield 2;

yield 3;

},

};

方法定义不是构造函数所有方法定义不是构造函数,如果你尝试实例化它们,将抛出TypeError。

jsvar obj = {

method() {},

};

new obj.method(); // TypeError: obj.method is not a constructor

var obj = {

*g() {},

};

new obj.g(); // TypeError: obj.g is not a constructor (changed in ES2016)

示例简单示例jsvar obj = {

a: "foo",

b() {

return this.a;

},

};

console.log(obj.b()); // "foo"

计算的属性名该简写语法还支持计算的属性名称作为方法名。

jsvar bar = {

foo0: function () {

return 0;

},

foo1() {

return 1;

},

["foo" + 2]() {

return 2;

},

};

console.log(bar.foo0()); // 0

console.log(bar.foo1()); // 1

console.log(bar.foo2()); // 2

规范SpecificationECMAScript® 2026 Language Specification # sec-method-definitions浏览器兼容性参见

get

set

Lexical grammar

相关星际资讯

win7哪个版本好_win7哪个版本玩游戏流畅
365体育投注官网

win7哪个版本好_win7哪个版本玩游戏流畅

🕒 06-28 👁️ 589
柯怡言情小说集
365bet开户平台

柯怡言情小说集

🕒 08-01 👁️ 7773
申城上半年征兵工作2月15日开始,你关心的问题答案在这里2025-01-20来源:上海发布字号:大中小