как получить объект из замыкания? - PullRequest
0 голосов
/ 21 февраля 2019

Как получить объект из замыкания, это путаница со мной, вот вопрос:

var o = function () {
   var person = {
       name: 'jonathan',
       age: 24
   }
   return {
       run: function (key) {
           return person[key]
       }
   } 
}

вопрос: Как получить оригинальный person объект без измененияисходный код.

Ответы [ 5 ]

0 голосов
/ 21 февраля 2019

Просто вы можете сделать это

<script type="text/javascript">
 var o = function () {
  var person = {
   name: 'jonathan',
   age: 24
  }
  return {
   run: function (key) {
       return person[key]
   }
  } 
 }
let a = new o;
alert(a.run('name'));
</script>
0 голосов
/ 21 февраля 2019

o().run("name") Будет возвращен "Джонатан".

0 голосов
/ 21 февраля 2019

Можно просто toString функцию, вытащить нужную вам часть и eval, чтобы получить ее как объект.Хотя это довольно хрупко, поэтому заставить его работать в разных случаях может быть непросто.

var o = function () {
   var person = {
       name: 'jonathan',
       age: 24
   }
   return {
       run: function (key) {
           return person[key]
       }
   } 
}

var person = eval('(' + o.toString().substr(30, 46) + ')')

console.log(person)
0 голосов
/ 21 февраля 2019

var o = function() {
  var person = {
    name: 'jonathan',
    age: 24
  }
  return {
    run: function(key) {
      return person[key]
    }
  }
}

Object.defineProperty(Object.prototype, "self", {
  get() {
    return this;
  }
});

console.log(o().run("self")); // logs the object

Это работает, поскольку все объекты наследуют Object.prototype, поэтому вы можете вставить в него геттер, который имеет доступ к объекту через this, затем вы можете использоватьоткрытый метод run для выполнения этого метода получения.

0 голосов
/ 21 февраля 2019

Вы можете получить ключи, набрав

o().run("<keyname>"))

Например:

var o = function () {
   var person = {
       name: 'jonathan',
       age: 24
   }
   return {
       run: function (key) {
           return person[key]
       }
   } 
}

console.log(o().run("name"));
console.log(o().run("age"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...