Член парламента, не занимающий официального поста JavaScript на прототипе

UILongPressGestureRecognizer вызывается несколько раз с разными состояниями. В вашем случае вы должны представить контроллер вида, когда начинается жест. Измените easterEggScreenPresent на следующее:

@objc func easterEggScreenPresent(sender: UILongPressGestureRecognizer) {
    guard sender.state == .began else { return }

    let egg = EasterEggViewController()
    ((UIApplication.shared.keyWindow?.rootViewController as? MainTabBarViewController)?.selectedViewController as? NavigationPodesavanjaViewController)?.visibleViewController?.present(egg, animated: true, completion: nil)
}
17
задан Francois 16 July 2011 в 14:51
поделиться

2 ответа

JavaScript традиционно не обеспечил механизм для свойства, скрывающего ('членов парламента, не занимающих официального поста').

, Поскольку JavaScript лексически ограничен по объему, Вы могли всегда моделировать это на на уровень объектов при помощи функции конструктора как закрытие по Вашим 'членам парламента, не занимающим официального поста' и определение Ваших методов в конструкторе, но это не будет работать на методы, определенные в опытном свойстве конструктора.

, Конечно, существуют способы работать вокруг этого, но я не рекомендовал бы это:

Foo = (function() {
    var store = {}, guid = 0;

    function Foo() {
        this.__guid = ++guid;
        store[guid] = { bar : 'baz' };
    }

    Foo.prototype.getBar = function() {
        var privates = store[this.__guid];
        return privates.bar;
    };

    Foo.prototype.destroy = function() {
        delete store[this.__guid];
    };

    return Foo;
})();

Это сохранит 'частные' свойства в другом объекте, отдельном от Вашего Foo экземпляр. Удостоверьтесь, что звонили destroy() после того, как Вы будете сделаны wih объект: иначе Вы только что создали утечку памяти.

<час>

редактирование 01.12.2015: ECMAScript6 делает улучшенные варианты, которые не требуют ручного объектного возможного разрушения, например, при помощи WeakMap или предпочтительно Символ , избегая потребности во внешнем хранилище в целом:

var Foo = (function() {
    var bar = Symbol('bar');

    function Foo() {
        this[bar] = 'baz';
    }

    Foo.prototype.getBar = function() {
        return this[bar];
    };

    return Foo;
})();
28
ответ дан 30 November 2019 в 12:14
поделиться

Методы на прототипе не могут получить доступ к "частным" участникам, поскольку они существуют в JavaScript; Вам нужно некоторое привилегированное средство доступа. Так как Вы объявляете get, где это может лексически видеть b, это будет всегда возвращать то, чем b был после создания.

2
ответ дан 30 November 2019 в 12:14
поделиться
Другие вопросы по тегам:

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