Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.05.2020, 15:29
Интересующийся
Отправить личное сообщение для IgorFomenko Посмотреть профиль Найти все сообщения от IgorFomenko
 
Регистрация: 07.05.2020
Сообщений: 19

Closure constructor не работает в strict mode
Здравствуйте, написал простейший конструктор, который без use strict работает, а с use strict нет
'use strict'
            let Person = (function() {
                var age = 25;
                var map = new WeakMap();
                 function PersonConstructor(name) {
                    this.name = name;
                    var obj = {age};
                    map.set(this, obj);

                }
                PersonConstructor.prototype.getAge = function() {
                    return map.get(this).age
                }
                PersonConstructor.prototype.incAge = function() {
                    obj = map.get(this);
                    obj.age++;
                    map.set(this,obj);
                }
                return PersonConstructor
            }());
            let per1 = new Person('John');
            let per2 = new Person('Smith');
            per1.incAge();
            console.dir(per1.getAge())
Ответить с цитированием
  #2 (permalink)  
Старый 07.05.2020, 15:38
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,728

Все работает, не вижу ошибок.

Вы в строке 15 обращаетесь к не объявленной переменной «obj».
Объект объявленный в строке 7 за пределы конструктора не выйдет, так что нужно либо его сохранять в свойство объекта «PersonConstructor», либо объявлять переменную «obj» вне конструктора.

Последний раз редактировалось Nexus, 07.05.2020 в 15:42.
Ответить с цитированием
  #3 (permalink)  
Старый 07.05.2020, 17:04
Интересующийся
Отправить личное сообщение для IgorFomenko Посмотреть профиль Найти все сообщения от IgorFomenko
 
Регистрация: 07.05.2020
Сообщений: 19

Спасибо, да, забыл let поставить перед obj в 15ой строке
Ответить с цитированием
  #4 (permalink)  
Старый 07.05.2020, 17:29
Интересующийся
Отправить личное сообщение для IgorFomenko Посмотреть профиль Найти все сообщения от IgorFomenko
 
Регистрация: 07.05.2020
Сообщений: 19

Еще одна проблема, почему _ функция отказывается работать
'use strict'
            let Person = (function() {
                var age = 25;
                var map = new WeakMap();
                var _ = function(inst){map.get(inst)}; //не работает
                function PersonConstructor(name) {
                    this.name = name;
                    var obj = {age};
                    map.set(this, obj);

                }
                PersonConstructor.prototype.getAge = function() {
                    return _(this).age
                }
                PersonConstructor.prototype.incAge = function() {
                    let obj = _(this);
                    obj.age++;  //не работает
                    map.set(this,obj);
                }
                return PersonConstructor
            }());
            let per1 = new Person('John');
            let per2 = new Person('Smith');
            per1.incAge();
            console.dir(per1.getAge())
Ответить с цитированием
  #5 (permalink)  
Старый 07.05.2020, 17:37
Интересующийся
Отправить личное сообщение для IgorFomenko Посмотреть профиль Найти все сообщения от IgorFomenko
 
Регистрация: 07.05.2020
Сообщений: 19

Допер, нужно return добавить, без него не хочет
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Google Closure Compiler в advanced mode и JQuery externs yngwie19 Общие вопросы Javascript 2 08.10.2013 20:54
Замена значения в store страно работает I3ev ExtJS 0 09.12.2012 14:22
jQyery функция странно работает! Midel Общие вопросы Javascript 4 08.04.2012 13:40
Не работает код внутри циклов DZHETIGAPA Events/DOM/Window 1 21.06.2011 01:03
Динамическая HTML форма (FireFox - работает, IE - не работает) dm1tr1y Общие вопросы Javascript 10 11.12.2009 15:59