javascript - javascript如何从闭包中获取对象?

  显示原文与译文双语对照的内容
149 3

如何从闭包获取对象,即与我混淆,下面是一个问题:

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

问题: 如何在不更改源代码的情况下获取原始 person 对象。

时间:原作者:0个回答

116 1
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

这可以以作为所有对象 inherit的Object.prototype,因这里可以以插入一个对象,通过 this 访问该对象。

原作者:
138 4

你可以通过跑步来获得钥匙

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"));
原作者:
52 4

可以以只是 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)
原作者:
140 1

只要你能

<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>
原作者:
...