Переменная двойного назначения JavaScript? [Дубликат]

Ниже приведен минимальный пример реализации @property:

class Thing:
    def __init__(self, my_word):
        self._word = my_word 
    @property
    def word(self):
        return self._word

>>> print( Thing('ok').word )
'ok'

В противном случае word остается вместо свойства.

class Thing:
    def __init__(self, my_word):
        self._word = my_word
    def word(self):
        return self._word

>>> print( Thing('ok').word() )
'ok'
8
задан nicael 11 May 2014 в 19:55
поделиться

3 ответа

8
ответ дан Daniel Vassallo 22 August 2018 в 15:40
поделиться

Это происходит потому, что атрибуты доступа , (. и []) преобразуют значение ToObject .

Что-то подобное этому происходит за кадром:

var a="abc";
new Object(a).b = 123;  
alert(a.b); // undefined

В принципе, объект создается «на лету» с помощью аксессуаров свойств, см. Шаг 5:

Произведение MemberExpression: MemberExpression [ Expression ] ( или MemberExpression . Identifier) оценивается следующим образом:

  1. Оценить MemberExpression.
  2. Вызов GetValue(Result(1)).
  3. Вычислить выражение.
  4. Вызов GetValue(Result(3)).
  5. Вызов ToObject(Result(2)).
  6. Вызов ToString(Result(4)).
  7. Возвращает значение типа Reference, базовый объект которого Результат (5) и имя свойства которого Result(6).
4
ответ дан CMS 22 August 2018 в 15:40
поделиться
0
ответ дан Community 22 August 2018 в 15:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: