为了账号安全,请及时绑定邮箱和手机立即绑定

Javascript返回JSON的对象的原型链问题

Javascript返回JSON的对象的原型链问题

BIG阳 2018-09-03 13:13:18
1.自己写着玩的代码,一个返回一个JSON对象的函数:var somebody = function(arg1, arg2){    var name = arg1;    var age = arg2;    var setName = function(arg3){         name = arg3;     }    var getName = function(){        return name;     }    var setAge = function(arg4){         age = arg4;     }    var getAge = function(){        return age;     };    return {setName:setName,getName:getName,setAge:setAge,getAge:getAge}; } rose = somebody("rose",15); jack = somebody("jack",21); rose.setAge(17);console.log(jack.getAge(),rose.getAge());结果是21 17请问为什么JSON中只存储了函数引用,rose和jack却可以拥有各自的值?Javascript的原型链在这里怎么理解?
查看完整描述

1 回答

?
慕丝7291255

TA贡献1859条经验 获得超6个赞

这个问题其实追根到底还是闭包的问题。 和原型链并无关系。

想想闭包的原理是什么?

当一个函数在调用时,引用了不是自己作用域内定义的变量(通常称其为自由变量),则形成了闭包;闭包是代码块和创建该代码块的上下文中数据的结合。

因而在执行函数somebody后,因为函数setName之类的依旧引用somebody作用域的变量name,age,因而变量name,age并未销毁。 
仔细想一下, return function(){} 和 return {a:function(){},b:function(){}} 有什么区别呢?


查看完整回答
反对 回复 2018-10-08
  • 1 回答
  • 0 关注
  • 665 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信