Javascript JS原型函数&x27;这';混乱

Javascript JS原型函数&x27;这';混乱,javascript,prototype,Javascript,Prototype,我在nodejs中使用JSON-RPC库。我按名称注册函数(例如,rpc({publicName:privateFunction})),rpc库为我调用函数并处理JSON和函数参数的编组。它对于简单函数非常有效,但当我传递一个原型函数(一个在对象的原型链上定义的函数)时,它就会中断。问题是RPC库正在使用apply调用函数,这会改变此的上下文,因此我无法再访问其他原型属性/函数 以下是问题的一个示例: var MyObj = function(prop1,prop2,prop3){ th

我在nodejs中使用JSON-RPC库。我按名称注册函数(例如,
rpc({publicName:privateFunction})
),rpc库为我调用函数并处理JSON和函数参数的编组。它对于简单函数非常有效,但当我传递一个原型函数(一个在对象的原型链上定义的函数)时,它就会中断。问题是RPC库正在使用
apply
调用函数,这会改变
的上下文,因此我无法再访问其他原型属性/函数

以下是问题的一个示例:

var MyObj = function(prop1,prop2,prop3){
    this.prop1 = prop1;
    this.prop2 = prop2;
    this.prop3 = prop3;
}

MyObj.prototype.showProps = function(separator){
    console.log(this.prop1 + separator + this.prop2 + separator + this.prop3);
}

var myObjInstance = new MyObj('a', 'b', 'c');
myObjInstance.showProps(',');

// displays a,b,c


// I register the function as rpc({show_props:myObjInstance.showProps}) and the RPC lib calls it like
myObjInstance.showProps.apply(this, [',']);

// displays undefined,undefined,undefined
有没有更好的方法来解决这个问题?有没有办法在原型函数中保留此的上下文?

在最后一行:

myObjInstance.showProps.apply(this, [',']);
指向全局范围(或您在该点处的任何范围,它不指向
myObjInstance
)。你应该这样称呼它:

myObjInstance.showProps.apply(myObjInstance, [',']);
第一个参数是上下文,它应该是您的对象实例。

在最后一行:

myObjInstance.showProps.apply(this, [',']);
指向全局范围(或您在该点处的任何范围,它不指向
myObjInstance
)。你应该这样称呼它:

myObjInstance.showProps.apply(myObjInstance, [',']);
第一个参数是上下文,它应该是您的对象实例。

您可以使用它将特定上下文绑定到函数。它并不适用于所有环境,但MDN页面上有一个垫片,如果您需要旧版支持,可以使用它

因此,在您的示例中,您可以添加:

myObjInstance.showProps = myObjInstance.showProps.bind(myObjInstance);
可以使用将特定上下文绑定到函数。它并不适用于所有环境,但MDN页面上有一个垫片,如果您需要旧版支持,可以使用它

因此,在您的示例中,您可以添加:

myObjInstance.showProps = myObjInstance.showProps.bind(myObjInstance);

我的理解是,这是库代码,在他的控制范围之外。我的理解是,这是库代码,在他的控制范围之外。它在nodejs中可用。Luv it!工作完美。谢谢它在nodejs中可用。Luv It!工作完美。谢谢