![](/img/trans.png)
[英]How can I merge two almost identical javascript objects into one using Lodash?
[英]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.