簡體   English   中英

同時使用兩個幾乎完全相同的javascript文件

[英]Using two almost identical javascript files at the same time

我有一個使用小型javascript文件J1的XSL模板。 可以假定J1是不可能跟蹤和反向工程的。

我的問題是J1有一個更新的版本(稱為J1a),我有興趣在同一模板中將J1用於代碼的某些部分,並將J1a用於代碼的其他部分。 顯然,由於重復的類和函數,將兩者都包含在同一個文件中是有問題的。 我試圖用以下代碼將J1或J1a包裝到偽命名空間(Javascript不支持名稱空間或模塊)中,但無濟於事:

function mynamespace() {
  this.container = {
  // insert monstrous javascript blob
  }
} // which then is expected to do sth like mynamespace.Container.SomeFunction()

我還嘗試過通過手動重命名gazillion名稱(這很容易出錯)來進行骯臟的重構,但是這兩種方法都行不通。

在撰寫本文的過程中,我想到了第三種方法,即在J1中添加一個函數X()和在J1a中添加一個函數Y(),然后將我的任務委托給那些應該解決該問題的包裝器函數。 J1和J1a不會相互導入的事實。 但是,我尚未對此進行測試,而且我不是經驗豐富的javascript編寫者。

編輯:

由於我真正需要的是J1和J1a,因此:

MyObject.SomeStaticMethod();
MyObject obj = new MyObject(args);
obj.SomeInstanceMethod();

那也許我可以做:

 function X(var args) {
     MyObject.SomeStaticMethod();
     MyObject obj = new MyObject(args);
     obj.SomeInstanceMethod();
 }
 function Y(var args) {
     MyObject.SomeStaticMethod();
     MyObject obj = new MyObject(args);
     obj.SomeInstanceMethod();
 }

並將X添加到J1,將Y添加到J1a,然后在XSL模板中選擇性地調用X()和Y()?

編輯2:事實證明,巨型的小型javascript blob不包含常規的全局變量,但有一樣糟糕的事-綁定到Windows對象的變量。

話雖這么說,是否有任何方法可以拆分HTML的呈現方式,以便一個部分在全局范圍內只有一個副本,而另一部分在全局范圍內只有另一個副本? 我聽說JSP有一些“平鋪方法”。 框架也是有可能的,盡管我聽說使用框架存在許多問題。

這是一個模仿節點功能的變體。

function mynamespace() {
  var container = {};

  // insert giant blob here

  container.exposed1 = something_to_expose;
  container.exposed2 = something_else_to_expose;

  return container;
}

然后使用

var v1 = mynamespace();
v1.exposed1();

等等....

您還需要確保您的巨型Blob不使用任何全局變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM