用于修改参数中的对象的函数,而不仅仅是属性

Max*_*tes 7 javascript object

我确定这必须存在于某个地方,但我一直无法找到它......

我正在尝试编写一个将对象作为参数并更新其引用的函数.不是引用的属性,也不是重新分配对象,而是更新整个引用.

请注意,PubSub只是为了证明在传入和更新的对象类型中需要异步性和灵活性.

最好用例子解释:

//ideally how function would work
function watch(event, obj) {
    PubSub.on(event, function(model) {
        // I want to update the entire object
        // I understand that currently, this is just reassigning
        // I know I can do obj.prop = model, but that's not what I want to do
        obj = model;
    }
};

//example usage
var myObj = {"name" : "Tom"};
watch("anEvent", myObj);
console.log(myObj.name); //still "Tom"

// time passes, then somewhere
PubSub.trigger("anEvent", {"name" : "John"})

console.log(myObj.name); // now should read "John"
Run Code Online (Sandbox Code Playgroud)

这是一种bind()方法,例如$.bind()或者currying是有用的,还是只是在适当的上下文中使用"this"?

zer*_*kms 8

这是不可能的.

令你困惑的是,在js运行时,你没有办法管理实际的参考值,但只能为变量赋予一些参考值.

就是这样 - 你可以"附加"对给定变量名的另一个引用,但是你不能修改引用值.

要清除我上面所说的内容:对象的内存在其初始化时分配

var o = {};
Run Code Online (Sandbox Code Playgroud)

之后,对未命名对象(对象没有名称,变量为)的引用被分配给o变量.之后,您无法将另一个对象重新分配到内存中的同一位置.

  • 不是那个投票的人,但我想这是因为你没有解释原因. (2认同)