访问Silverlight';通过Javascript创建对象';谁是新接线员?

访问Silverlight';通过Javascript创建对象';谁是新接线员?,javascript,silverlight,Javascript,Silverlight,请跳到下面的问题 我正在尝试创建一个桥接器,这样一个巨大的javascript应用程序就可以被一个新的基于Silverlight的重写所取代,并且尽可能地平滑 在遗留应用程序中,有以下JS类: function LatLng(lat, lng, url) { /* snip... */ } 在我客户的代码库中经常使用它,如下所示: var ll = new LatLng(12, 34, '567'); 但是,由于Silverlight中的桥需要向后兼容,并且需要最大程度的可维护性,因此我决定

请跳到下面的问题

我正在尝试创建一个桥接器,这样一个巨大的javascript应用程序就可以被一个新的基于Silverlight的重写所取代,并且尽可能地平滑

在遗留应用程序中,有以下JS类:

function LatLng(lat, lng, url) { /* snip... */ }
在我客户的代码库中经常使用它,如下所示:

var ll = new LatLng(12, 34, '567');
但是,由于Silverlight中的桥需要向后兼容,并且需要最大程度的可维护性,因此我决定在Silverlight中将LatLng类重新创建为ScriptableType:

[ScriptableType]
public class LatLng { /* similar snipped stuff ... */ }
当我开始在Silverlight/C#中重新实现类中的方法时,我已经到了。这使我能够通过以下操作将调用从Javascript端直接连接到Silverilght运行时,更改为0:

var x = new LatLng() // <-- constructor now calls into Silverlight
                     //     and ask for methods to be wired into it
这个单一的改变,将要求应用程序的所有现有用户检查他们的整个代码库,以便升级。。。一点也不好


问题

有没有办法重新接通新线路 Javascript中的运算符返回 来自另一个函数的实例 相反

这里有两个陷阱:

  • createObject
    是Silverlight管理的函数,
    函数。应用
    函数。调用
    无效
  • createObject的结果是一个包装器,您无法对其进行迭代(因此我首先要求使用委托util)
我希望有一条出路,而不必通过改变LatLng的创建方式来引导每一位客户


如果您有任何想法,请在这里分享,我上周一直在努力解决这个问题,但没有任何效果:-(

JavaScript中的新命令表示一个函数的实例,而没有实际使用基函数。这对于保护函数的内部机制不受干扰以期望重用非常重要

为了绕过新命令,我将LatLng函数转换为一个方法。方法是一个使用点表示法执行的函数,用于修改具有存储值的变量。原始LatLng函数包含3个参数。重写LatLng时,请重写为仅取前两个参数,以便变量这将激活该方法,该方法可以包含最初的第三个参数

var ll.LatLng(13100)


但是请记住,在对该变量执行任何方法之前,该变量应该有一个值,否则它可能会抛出错误。这就是为什么我建议在使用该方法之前,使用LatLng的原始第三个参数作为该变量的值。

顺便问一句,我如何像您在问题中那样在注释中创建代码区域?@austin只是在行前面加上4个空格。这与直接调用createObject方法相同。简单的方法重命名是一个选项,但仍然需要更改现有的代码库。
var ll = silverlightObject.Content.services.createObject("LatLng");
var ll = new LatLng(13, 100)
/*        ^
          ^
   should returns instance created from
   silverlightObject.Content.services.createObject
*/