Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何创建一个函数来创建一个不断返回对象的函数';s键_Javascript_Function - Fatal编程技术网

Javascript 如何创建一个函数来创建一个不断返回对象的函数';s键

Javascript 如何创建一个函数来创建一个不断返回对象的函数';s键,javascript,function,Javascript,Function,我试图创建一个函数,创建一个不断返回对象键的函数,但我不确定如何编写它 例如,我可以执行以下操作: var parent = {data: 123} var child = {} child.data = function() { return parent.data } child.data() // 123 parent = {data: 456} child.data() // 456 这很好,但我想创建一个创建数据函数的函数,类似于: var parent = {data:

我试图创建一个函数,创建一个不断返回对象键的函数,但我不确定如何编写它

例如,我可以执行以下操作:

var parent = {data: 123}
var child = {}

child.data = function() {
    return parent.data
}

child.data() // 123
parent = {data: 456}
child.data() // 456
这很好,但我想创建一个创建数据函数的函数,类似于:

var parent = {data: 123}
var child = {}
create_data_function(parent, child, "data")

child.data() // 123
parent = {data: 456}
child.data() // 456
由于重新分配了“from”变量,下面的操作将不起作用

function create_data_function(from, to, key) {
    to[key] = function() {
        return from[key]
    }
}
是否可以创建create_data_函数? 我不确定要寻找什么来解决这个问题


感谢阅读:)

让我们将
父对象
指向的初始对象称为对象1,将指定给
父对象
的新对象称为对象2

父变量
中的值是对象引用,最初是对对象1的引用。当您这样做时:

 create_data_function(parent, child, "data");
parent
的值被读取并传递到
create\u data\u函数
。该值是对对象1的引用。与
父变量
相关的任何内容都不会传递到
create\u data\u函数
。它创建的函数关闭创建它的
create_data_函数
调用中的
from
参数,该函数始终包含对对象1的引用

要创建符合您描述的功能,该功能必须能够访问
父变量本身。JavaScript没有任何形式的pass-by-reference(它允许您将对变量的引用传递到函数中),因此我们必须找到另一种方法,让
create\u data\u函数
访问
父变量

最简单的方法是确保
create_data_函数
关闭
父项
,方法是在可以访问
父项
的范围内定义它,如下所示:

var-parent={data:123};
var child={};
创建_data_函数(子项,“数据”);
//^----请注意,我们没有传递“家长”`
console.log(child.data());//123
父项={data:456};
console.log(child.data());//456
函数创建\数据\函数(to,键){
//注释编号“from”------------^
to[key]=函数(){
返回父项[键];
//^^^^^----我们直接使用'parent'
};

};我同意@T.J.Crowder。代码对我来说很好:Hi@T.J.Crowder,谢谢你的试用,我应该创建一个JSFIDLE,对此很抱歉。我意识到原来的示例有一个拼写错误,我想做的是parent={data:456}而不是parent.data=456,我现在已经为这个案例分叉了@sheeldotme感谢jsfiddle@T.J.Crowder编辑,,谢谢你的提示!谢谢你的回答,是的,javascript有点笨拙,但似乎没有办法解决这个问题,将变量包装到函数中是一个好主意。好奇的是,你怎么看待像中这样传递上下文参数?当然,它是在修改原始函数参数,但除此之外,我认为它还可以工作吗?虽然它遇到了一些问题jsfiddle@John:仅当
parent
是对象的属性时,此选项才有效。如果
var parent
处于全局范围,则会出现这种情况,但通常您希望避免全局范围,因此。。。(您的小提琴无法工作,因为JSFIDLE意外默认将代码包装在
window.onload=function(){/*…您的代码在这里…*/};
,因此您的
var父级
不在全局范围内。)