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()) |
Вы в строке 15 обращаетесь к не объявленной переменной «obj». Объект объявленный в строке 7 за пределы конструктора не выйдет, так что нужно либо его сохранять в свойство объекта «PersonConstructor», либо объявлять переменную «obj» вне конструктора. |
Спасибо, да, забыл let поставить перед obj в 15ой строке
|
Еще одна проблема, почему _ функция отказывается работать
'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()) |
Допер, нужно return добавить, без него не хочет
|
Часовой пояс GMT +3, время: 09:41. |