Методы объекта ES5

119
19 апреля 2018, 11:25

Можно ли обратиться к методу объекта изнутри через binding identifier, как во второй функции?

let obj = { 
  funcFirst() { 
    console.log(funcFirst); 
  }, 
  funcSecond: function funcSecond() { 
    console.log(funcSecond); 
  } 
} 
 
obj.funcSecond(); 
obj.funcFirst();

Answer 1

Можно ли обратиться к методу объекта изнутри через binding identifier, как во второй функции?

Нет нельзя.

MethodDefinition в отличие от FunctionExpression не подразумевает добавление в создаваемый EnvironmentRecord ссылки на создаваемую функцию с указанным именем.

В этом можно убедиться посмотрев описания Runtime Semantics в соответствующих разделах.

У MethodDefinition вместо строк

Perform envRec.CreateImmutableBinding(name, false).
...
Perform envRec.InitializeBinding(name, closure).

Стоит добавление свойства в объект, например:

Let desc be the PropertyDescriptor{[[Value]]: methodDef.[[Closure]], [[Writable]]: true, [[Enumerable]]: enumerable, [[Configurable]]: true}.
Return ? DefinePropertyOrThrow(object, methodDef.[[Key]], desc).
Answer 2

Можно

let obj = { 
  funcFirts() { 
    console.log(this.funcFirts); 
  }, 
  funcSecond: function f() { 
    console.log(f); 
  } 
} 
 
obj.funcSecond(); 
obj.funcFirts();

READ ALSO
Поиск в яндексе на node.js [требует правки]

Поиск в яндексе на node.js [требует правки]

Есть вопросы,которые бот должен искать в яндексеКак можно это реализовать?

136
Галлерея jquery [требует правки]

Галлерея jquery [требует правки]

Подскажите пожалуйста плагин, на котором можно реализовать подобную галерею

117